在Bluej中为时钟使用多个类

时间:2016-04-14 14:17:44

标签: java 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
     {
     }
    }
}
}

1 个答案:

答案 0 :(得分:0)

您需要做的第一件事是修复这些可变名称。由于这个问题,我无法轻易理解这段代码应该做什么。我看了你this guide on varible names

此外,通常在Java类名称中以大写字母开头,方法名称以小写字母开头,但这不是一个大问题。

至于使用计时器,您将在声明其他变量的同一位置创建对象的新实例:

Time timer = new Timer();

要调用timer内部的方法,您将使用包含Timer类实例的timer varible来调用该方法:

timer.timer();

我在这段代码中看到的另一个问题是你试图在timer类中使用主类中的varible。我谨慎地将你的构造函数添加到接受主类实例的计时器类中,这样你就可以访问计时器类中的变量了(这打破了封装,但现在不是一个严重的问题)。

最后,此代码存在严重的逻辑问题。现在,调用timer方法将挂起程序,因为您在主线程上调用Thread.sleep。您需要在不同于计时器的线程上运行程序。我希望您允许Timer类实现Runnable,命名时间方法运行,并启动计时器:

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