2016-04-14 5 views
0

(Перед тем, как начать извините за большой неорганизованный код, я все еще относительно новый)Использование нескольких классов для часов в Bluej

настоящего время я использую BlueJ для проекта шахты, и мне нужно таймер для фактического времени каждого уровня игры. Я использую команды Try and 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 из основного класса в классе таймера. Я seggusts вы добавляете конструктор в класс таймера, который принимает экземпляр вашего основного класса, чтобы вы могли получить доступ к переменным из класса таймера (это нарушает инкапсуляцию, но это не является серьезной проблемой прямо сейчас).

И, наконец, с этим кодом возникает серьезная логическая проблема. Прямо сейчас, при вызове метода таймера будет зависать программа, когда вы вызываете Thread.sleep в основном потоке. Вам нужно запустить программу на другом потоке, кроме таймера. Я seggust, что вы позволяете класс Timer реализовать Runnable, имя метода временной перспективе, и запустить таймер с:

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

Да, эта логика проблема, я был пытаясь решить несколько классов. Не могли бы вы объяснить немного больше, что это такое? – Dobly

+0

«this» относится к текущему экземпляру класса в запущенном методе. Сам класс не может хранить данные в переменных (если они не являются статическими), поэтому, когда вы используете «это», вы ссылаетесь на объект с переменными, которые метод находится прямо сейчас. [Этот учебник OO] (https://www3.ntu.edu.sg/home/ehchua/programming/java/J3a_OOPBasics.html) может помочь вам понять, как примеры работают несколько лучше, поскольку это одна из важнейших концепций, которые вы должны понимайте, что я хороший программист на Java. – Quantum64