2016-04-14 56 views
0
一個時鐘

在我開始爲衆多無組織代碼對不起,我還是比較新的使用多個類在BlueJ的

我目前使用的BlueJ我的一個項目,我需要一個計時器來實際計時遊戲的每個級別。我使用Try和Catch命令實際上有計時器,我試圖使用兩個不同的類,我想知道是否有更好的方法來做到這一點,或者我將如何去引用每個內部的兩個其他。謝謝!

import java.util.Random; 
import java.util.Scanner; 

public class grid5x5{ 

String a= "x"; 
String b= "x"; 
String c= "x"; 
String d= "x"; 
String e= "x"; 
String f= "x"; 
String g= "x"; 
String h= "x"; 
String i= "x"; 
String j= "x"; 
String k= "x"; 
String l= "x"; 
String m= "x"; 
String n= "x"; 
String o= "x"; 
String p= "x"; 
String q= "x"; 
String r= "x"; 
String s= "x"; 
String t= "x"; 
String u= "x"; 
String v= "x"; 
String w= "x"; 
String x= "x"; 
String y= "x"; 
private int a1; 
private int a2; 
private int a3; 
public int a4=2; 
public void Grid(){ 
    while(a4==2){ 
    System.out.println('\f'); 
    Random rand = new Random(); 
    int z = rand.nextInt(25) + 1; 

    if (z==1){ 
     a= "O"; 
      a1=11; 
    } 
    if (z==2){ 
     b= "O"; 
      a1=21; 
    } 
    if (z==3){ 
     c= "O"; 
      a1=31; 
    } 
    if (z==4){ 
     d= "O"; 
      a1=41; 
    } 
    if (z==5){ 
     e= "O"; 
      a1=51; 
    } 
    if (z==6){ 
     f= "O"; 
      a1=12; 
    } 
    if (z==7){ 
     g= "O"; 
      a1=22; 
    } 
    if (z==8){ 
     h= "O"; 
      a1=32; 
    } 
    if (z==9){ 
     i= "O"; 
      a1=42; 
    } 
    if (z==10){ 
     j= "O"; 
      a1=52; 
    } 
    if (z==11){ 
     k= "O"; 
      a1=13; 
    } 
    if (z==12){ 
     l= "O"; 
      a1=23; 
    } 
    if (z==13){ 
     m= "O"; 
      a1=33; 
    } 
    if (z==14){ 
     n= "O"; 
      a1=43; 
    } 
    if (z==15){ 
     o= "O"; 
      a1=53; 
    } 
    if (z==16){ 
     p= "O"; 
      a1=14; 
     } 
    if (z==17){ 
     q= "O"; 
      a1=24; 
    } 
    if (z==18){ 
     r= "O"; 
      a1=34; 
    } 
    if (z==19){ 
     s= "O"; 
      a1=44; 
    } 
    if (z==20){ 
     t= "O"; 
      a1=54; 
    } 
    if (z==21){ 
     u= "O"; 
      a1=15; 
    } 
    if (z==22){ 
     v= "O"; 
      a1=25; 
    } 
    if (z==23){ 
     w= "O"; 
      a1=35; 
    } 
    if (z==24){ 
     x= "O"; 
      a1=45; 
    } 
    if (z==25){ 
     y= "O"; 
      a1=55; 
    } 
    else{ 

    } 
    System.out.println(" 1 2 3 4 5"); 
    System.out.println("1 "+a+" "+b+" "+c+" "+d+" "+e); 
    System.out.println("2 "+f+" "+g+" "+h+" "+i+" "+j); 
    System.out.println("3 "+k+" "+l+" "+m+" "+n+" "+o); 
    System.out.println("4 "+p+" "+q+" "+r+" "+s+" "+t); 
    System.out.println("5 "+u+" "+v+" "+w+" "+x+" "+y); 
    System.out.println("Points: "+a2); 
    System.out.println("Time: "+a3); 
    int inVar; 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the Coordinates: "); 
    inVar = input.nextInt(); 
    if(inVar==a1){ 
     System.out.println('\f'); 
     System.out.println("CORRECT!"); 
     a2=a2+1; 
    } 
    else{ 
     a4=a4+1; 
    } 

    a= "x"; 
    b= "x"; 
    c= "x"; 
    d= "x"; 
    e= "x"; 
    f= "x"; 
    g= "x"; 
    h= "x"; 
    i= "x"; 
    j= "x"; 
    k= "x"; 
    l= "x"; 
    m= "x"; 
    n= "x"; 
    o= "x"; 
    p= "x"; 
    q= "x"; 
    r= "x"; 
    s= "x"; 
    t= "x"; 
    u= "x"; 
    v= "x"; 
    w= "x"; 
    x= "x"; 
    y= "x"; 
    System.out.println('\f'); 

    } 

    System.out.println('\f'); 
    System.out.println("INCORRECT, Game Over"); 
    System.out.println("Total Points: "+a2); 
    System.out.println("Thanks for playing!"); 
} 
} 

下面是代碼爲其他類

public class Timer 
{ 
public int a5=5000; 

public void timer(){ 
    while(a4==2) { 
    try {Thread.sleep(1000);} 
    catch (InterruptedException ie){} 
    a5=a5-100; 
    if(a5<300){ 
     a5=300; 
     } 
    else 
    { 
    } 
    } 
} 
} 
+0

看到java.util.Timer中和javax.swing.Timer中 – ControlAltDel

回答

0

你需要做的是修復這些varible名字的第一件事,我的其他塊。由於這個問題,我無法輕易理解此代碼應該執行的操作。我seggusts你讀this guide on varible names

另外,通常在Java中,類名以大寫字母開頭,方法名以小寫字母開頭,但這不是一個大問題。

至於使用定時器,你會在同一個地方創建對象的新實例聲明的其他變量:

Time timer = new Timer(); 

要調用計時器內的方法,您將使用定時器varible包含Timer類的實例來調用方法:

timer.timer(); 

我這段代碼中看到的另一個問題是,你正試圖在定時器類使用varible從你的主類。我試圖給定時器類添加一個構造函數來接受你的主類的一個實例,這樣你就可以從定時器類訪問變量(這打破了封裝,但這不是一個嚴重的問題)。

最後,這個代碼存在嚴重的邏輯問題。現在,當你在主線程中調用Thread.sleep時,調用timer方法會掛起程序。您需要在不同於定時器的不同線程上運行程序。我seggust您允許Timer類來實現Runnable,命名時間方法運行,並開始計時:

new Thread(new Timer(this)).run(); 
+0

是啊,這邏輯問題我是試圖解決使用多個類。你能否解釋一下這個是什麼? – Dobly

+0

'this'指的是運行方法中類的當前實例。這個類本身不能將數據存儲在變量中(除非它們是靜態的),所以當你使用'this'時,你指的是該方法所在變量的對象。 [本OO教程](https://www3.ntu.edu.sg/home/ehchua/programming/java/J3a_OOPBasics.html)可能會幫助您瞭解實例如何更好地工作,因爲它是您必須遵守的重要概念之一理解爲一名優秀的Java程序員。 – Quantum64