2016-10-06 3 views
0

Я долго искал возможность повторить открытый класс на Java, я нашел решение с продолжением и повторением дополнительного цикла while. Но я действительно недоволен этим, есть ли более простой способ сделать это? Спасибо за помощь.Как я могу повторить открытый класс в Java?

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

public class Zufallszahl { 

    public static void main(String[] args) { 
     while (1 == 1) { 
      Random rn = new Random(); 
      Scanner numberScan = new Scanner(System.in); 
      Scanner restartScan = new Scanner(System.in); 
      int zahl = rn.nextInt(100 - 1) + 1; 
      int number = 0; 
      String restart = ""; 
      int a = 0; 

      while (number != zahl) { 
       a++; 
       System.out.print("Rate eine Zahl zwischen 0 und 100: "); 
       number = numberScan.nextInt(); 
       if (number == zahl) { 
        System.out.println("richtig"); 
        System.out.println("Du hast " + a + " Versuche gebraucht!"); 
        System.out.print("Nochmal? j/n: "); 
        restart = restartScan.nextLine(); 

       } 
       if (number < zahl) { 
        System.out.println("zu klein"); 
       } 
       if (number > zahl) { 
        System.out.println("zu gross"); 
       } 

      } 
      if (restart.equalsIgnoreCase("j")) { 
       continue; 
      } else if (restart.equalsIgnoreCase("n")) { 
       System.out.println("Tschüss!"); 
       return; 
      } 
     } 

    } 
} 
+2

Вы хотите к ** повторить ** класса? Что ты хочешь делать? Информация: с ** break ** вы можете выйти/выйти из ** текущей петли **, ** return ** выйдет/выйдет из ** всего метода **. Возможно, вы можете просто попробовать заменить ** return ** ** ** ** ** – Ben

+0

Да, я хочу «перезапустить» полный код if (restart.equalsIgnoreCase («j»)) { continue; с помощью thist. Он запускается снова, но мне пришлось сделать дополнительный цикл в классе, включающем бесконечность. Я не думаю, что это хороший способ сделать. –

+0

Вы можете просто повторно вызвать 'main (new String [0])' в конце вашего метода (вместо ** return ** и/или ** continue **) – Ben

ответ

2

О перезагрузке - это кажется странным, если вы не извлекаете его в объект. Таким образом, решение 1 может быть просто запустить в цикле и избавиться от первой, проверяя рестарт во втором:

while (number != zahl || restart.equalsIgnoreCase("j")) { ... } 

Обратите внимание, что вам необходимо изменить логику reassing новое случайное число. В качестве альтернативы перезапуск может быть выполнен путем создания игрового класса, который позволяет выполнить его. Например, как это чему-л:

public class Zufallszahl { 

    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     Game g = new Game(); 
     Random rn = new Random(); 
     while(true) { 
      g.start(rn.nextInt(100 -1) + 1, s); 
      System.out.println("Noch ne Runde? Y/N"); 
      String response = s.next(); 
      if(response.equalsIgnoreCase("n")) return; 
     } 
    } 

    public static class Game { 

     public void start(final int numberToGuess, final Scanner s) { 
      int number = 0; 
      int a = 0; 
      while (number != numberToGuess) { 
       a++; 
       System.out.print("Rate eine Zahl zwischen 0 und 100: "); 
       number = s.nextInt(); 
       if (number == numberToGuess) { 
        System.out.println("richtig"); 
        System.out.println("Du hast " + a + " Versuche gebraucht!"); 
        return; 
       } 
       if (number < numberToGuess) { 
        System.out.println("zu klein"); 
       } 
       if (number > numberToGuess) { 
        System.out.println("zu gross"); 
       } 

      } 
     } 
    } 
} 

С уважением,

0

Эй вы код работает, но вы должны рассмотреть, чтобы начать codinge более объектно-ориентированное, как это:

public class Filesplitter { 

/** 
* @param args the command line arguments 
*/ 

public static int eingabe; 
public static int rnd; 
public static Scanner sc = new Scanner(System.in); 
public static Random rn = new Random(); 
public static int counter = 0; 
public static boolean a = true; 
public static void main(String[] args) throws IOException { 
    while (a = true){ 
     eingabe = 0; 
     rnd = rn.nextInt(100 - 1)+1; 
     while (!zahlCheck()){ 

      eingabezahl(); 
     } 
     System.out.print("möchten sie noch mal spielen ? j/n: "); 
     if(sc.next().equals("j")){ 
     a = true; 
     } 
     else { 
     a = false; 
     } 
    } 
} 
public static boolean zahlCheck(){ 
    if(eingabe == 0){ 

    } 
    else if(eingabe != rnd){ 
     if(eingabe < rnd) 
      System.out.println("Die zahl ist zu klein"); 
     else 
      System.out.println("Die zahl ist zu groß"); 
     return false; 
    }else { 
     System.out.println("Richtig !\n Du hast "+counter+" Versuche gebraucht."); 
    return true; 
    } 
    return false; 
} 
public static int eingabezahl(){ 
    System.out.println("Bitte geben sie eine Zahl ein:"); 
    eingabe = sc.nextInt(); 
    counter +=1; 
    return 1; 
} 

}

это будет сделать вещи намного легче, так как вы можете просто назвать свою METHODE в side your loop;)

+1

Итак, где же тогда специальная OO-часть? – Ben

Смежные вопросы