2014-02-18 1 views
0

Когда я запускаю этот код, который представляет собой меню со многими различными опциями. он состоит из множества циклов. Некоторые из них мне еще предстоит сделать. Но моя проблема возникает, когда у меня есть пользователь, который выбирает «t» или имитатор монеты. Цикл начинается, но как только пользователь вводит количество флагов с монетами, скажем, 4, он говорит, что 2,0 головки и 2,0 хвоста означают 50,0% головок Введите кодовое письмо на ваш выбор: МОНИТОР МОНИТОРЫ ТОКСА Введите 0, чтобы выйти. Сколько бросков?Как выйти из внутренней петли и вернуться к основной петле в java?

Не следует указывать букву на ваш выбор: МОНИТОР МОНИТОРА, введите 0, чтобы выйти. сколько бросков?

Также, когда я вхожу 0, говорится, что вы ввели неверный вариант. 't' не является допустимым вариантом. Я хочу вернуть главное меню !!!! что происходит????

public class toolBox { 

    public static void main(String[] args) { 

     Scanner myScanner = new Scanner(System.in); 

     boolean properInput = false; 

     int usersInput; 

     while (!properInput) { 

      System.out.println("Enter seed value:"); 
      if (myScanner.hasNextInt()) { 
       usersInput = myScanner.nextInt(); 
       properInput = true; 
       Random randomSeed = new Random(usersInput); 

       String randomNumberList = ""; 

       for (int i = 0; i < 10; i++) { 
        randomNumberList += randomSeed.nextInt(80) + " "; 
       } 
      } else 

      { 
       String helloWorld = myScanner.next(); 
       System.out.println("You have not entered an integer. '" + helloWorld + "' is not an integer"); 

      } 
     } 

     outer: 
     System.out.println("===== CS302 TOOL BOX =====\nT > COIN TOSS SIMULATOR\nG > GRADE ESTIMATOR\nC > COLOR CHALLENGE\nQ > QUIT"); 

     { 
      Scanner anotherScanner = new Scanner(System.in); 

      boolean usersSelection = false; 

      String c; 
      outer: 
      while (!usersSelection) { 
       { 
        System.out.print("" + "Type code letter for your choice: "); 
       } 
       if (anotherScanner.hasNext("q|Q")) { 
        c = anotherScanner.next(); 
        usersSelection = true; 

        System.out.println("" + "" + "Good-Bye"); 
        break; 
       } 

       if (anotherScanner.hasNext("t|T")) { 
        { 
         System.out.println("" + "COIN TOSS SIMULATOR" + ""); 
        } 
        System.out.println("Enter 0 to quit. How many tosses?"); 
        Random rand = new Random(); 
        boolean headsOrTails; 
        float headsCount = 0; 
        float tailsCount = 0; 
        Scanner scanMan = new Scanner(System.in); 
        int numero = scanMan.nextInt(); 
        if (numero == 0) { 
         break outer; 
        } 

        for (int j = 0; j < numero; j++) { 

         headsOrTails = rand.nextBoolean(); 
         if (headsOrTails == true) { 
          headsCount++; 
         } else { 
          tailsCount++; 
         } 
        } 
        System.out.println(headsCount + " heads and " + tailsCount + " tails means " 
          + (headsCount/(headsCount + tailsCount) * 100 + "% were heads")); 

       } 
      } 

      if (anotherScanner.hasNext("g|G")) // if the user were to enter either case of g, the 
               // program will register both and initialize the 
               // grade estimator. 
      { 
       c = anotherScanner.next(); 
       usersSelection = true; 
      } 

      if (anotherScanner.hasNext("c|C")) 

      { 
       c = anotherScanner.next(); 
       usersSelection = true; 

       System.out.println("Welcome to the Color Challenge!"); 
      } 

      else { 
       String zoom = anotherScanner.next(); 
       System.out.println("You have entered an invalid option. '" + zoom + "' is not a valid option."); 
      } 
     } 
    } 
} 
+0

Не путайте. Eclipse, текстовый редактор, не влияет на это. –

+0

Для начала я предлагаю разбивать ваш main() на несколько функций. что должно помочь вам организовать ваш код и посмотреть, что происходит. Во-вторых, я предлагаю избегать использования меток, так как вы почти наверняка будете иметь неожиданное поведение. – JBCP

+0

Кроме того, я бы предположил, что, хотя я видел «перерыв»; используемый в коде, я написал очень много кода, и я никогда не требовал использования «перерыва». Философски «разрыв» нарушает логический поток цикла, и условию нарушения лучше управлять, устанавливая другие условия за какое-то время или повторяя ... до цикла. –

ответ

1

Ваш вопрос не ясен, но ваш заголовок подсказывает мне, что вы считаете, что существует внутренняя и внешняя петля.

У вас нет внутреннего и внешнего контура.

Ваш отступ был действительно грязным, но когда я его очистил, а затем удалил много лишних строк кода, структура кода стала ясной.

Обратите внимание на следующее:

1) У вас есть две петли, одна поверх переключился на !properInput, нижний переключился на !usersSelection. Существует также цикл for, но он не делает ничего связанного с потоком кода, о котором вы спрашиваете.

2) У вас есть две идентичные метки, одна за пределами анонимного блока кода (см. Мой комментарий в коде ниже), а другая внутри анонимного блока. В этом случае это не влияет на ваш вопрос, но это определенно проблема.

Я предполагаю, что ваша линия break outer не работает, потому что вы выходите из нижнего цикла.

Предлагаю вам попробовать фрагментировать код в функции, чтобы сделать структуру более четкой.

 while (!properInput) { 

     } 

     outer: 
     System.out.println("===== CS302 TOOL BOX =====\nT > COIN TOSS SIMULATOR\nG > GRADE ESTIMATOR\nC > COLOR CHALLENGE\nQ > QUIT"); 

     { /* begin anonymous code block */ 
      outer: 

      while (!usersSelection) { 
       if (anotherScanner.hasNext("q|Q")) { 
        System.out.println("" + "" + "Good-Bye"); 
        break; 
       } 

       if (anotherScanner.hasNext("t|T")) { 
        System.out.println("Enter 0 to quit. How many tosses?"); 
        if (numero == 0) { 
         break outer; 
        } 

        for (int j = 0; j < numero; j++) { 

        } 
       } 
      } 

     } 
+0

Я законно удивлен, что исходный код компилируется с дублирующимися ярлыками, но я буду проклят. –

+1

Я удивлен, что кто-то все еще использует метки. :) – JBCP

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