2013-02-22 2 views
0

После нескольких часов исследований я смог придумать цикл, который должен помочь. Проблема только в том, что он петли и не просит пользователя запускаться снова. Он снова и снова запускает программу для гольфа. Может ли кто-нибудь указать, что пошло не так? В настоящее время в начальном классе, поэтому я, возможно, не понимаю много.Как я могу попросить пользователя снова запустить программу?

import java.util.Scanner; 

class GolfEM 
{ 
    public static void main (String[] args) 
    { 
     Scanner kb = new Scanner(System.in);  
     boolean go = true; 
     boolean run = true; 

     while (go==true) 
     { 
      while (run) 
      { 
       System.out.println("Enter par for the hole: "); 
       int par = kb.nextInt(); 
       System.out.println("Enter the number of strokes: "); 
       int stroke = kb.nextInt(); 
       { 

        if (stroke==1) 
        { 
         System.out.println("hole in one"); 
         run=false; 
        } 
        else if (3==par-stroke) 
        { 
         System.out.println("double eagle"); 
         run=false; 
        } 
        else if (2==par-stroke) 
        { 
         System.out.println("eagle"); 
         run=false; 
        } 
        else if (1==par-stroke) 
        { 
         System.out.println("birdie"); 
         run=false; 
        } 
        else if (par==stroke) 
        { 
         System.out.println("par"); 
         run=false; 
        } 
        else if (-1==par-stroke) 
        { 
         System.out.println("bogey"); 
         run=false; 
        } 
        else if (-2==par-stroke) 
        { 
         System.out.println("double-bogey"); 
         run=false; 
        } 
        else if (-3==par-stroke) 
        { 
         System.out.println("triple-bogey"); 
         run=false; 
        } 
        else if (-4==par-stroke) 
        { 
         System.out.println("four-over-par"); 
         run=false; 
        } 
        else if (-5==par-stroke) 
        { 
         System.out.println("five-over-par"); 
         run=false; 
        } 
        else if (-6==par-stroke) 
        { 
         System.out.println("six-over-par"); 
         run=false; 
        } 
        else if (-7==par-stroke) 
        { 
         System.out.println("seven-over-par"); 
         run=false; 
        } 
        else 
        { 
         System.out.println("Better luck next time"); 
         run=false; 
        } 
       } 
      } 
      run=false; 
     } 
     if (run==false) 
      System.out.println("Run again? "); 

     char again = kb.next().charAt(0); 

     if (again == 'y') 
     { 
      run=true; 
     } 
     else if (again == 'n') 
     { 
      System.out.println("Goodbye."); 
      go = false; 
     } 
     else 
     { 
      System.err.println("Invalid answer"); 
     } 
    } 
} 
+1

Это первый раз, когда я вижу вопрос с пятью тегами, ни один из которых не является актуальным. Вы должны использовать теги для указания того, какой язык вы используете, а не просто введите пять слов, которые появляются в вашем вопросе. – sashoalm

+3

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

+0

И любая хорошая Java-среда IDE должна иметь возможность переформатировать код с отступом. Я использую CTRL-ALT-L все время :) – vikingsteve

ответ

0

Как было предложено другими членами, используйте приличный отступ.

Здесь вы просто потеряли несколько брекетов.

Исправленный код:

import java.util.Scanner; 
class GolfEM 
{ 
public static void main (String[] args) 
{ 
Scanner kb = new Scanner(System.in); 
boolean go = true; 
boolean run = true; 
while (go==true) 
    { 
    while (run) 
     { 
System.out.println("Enter par for the hole: "); 
int par = kb.nextInt(); 
System.out.println("Enter the number of strokes: "); 
int stroke = kb.nextInt(); 


if (stroke==1) { 
System.out.println("hole in one"); 
run=false; 
     } 
else 
if (3==par-stroke){ 
System.out.println("double eagle"); 
run=false; 
     } 
else 
if (2==par-stroke){ 
System.out.println("eagle"); 
run=false; 
     } 
else 
if (1==par-stroke){ 
System.out.println("birdie"); 
run=false; 
     } 
else 
if (par==stroke){ 
System.out.println("par"); 
run=false; 
     } 
else 
if (-1==par-stroke){ 
System.out.println("bogey"); 
run=false; 
     } 
else 
if (-2==par-stroke){ 
System.out.println("double-bogey"); 
run=false; 
     } 
else 
if (-3==par-stroke){ 
System.out.println("triple-bogey"); 
run=false; 
     } 
else 
if (-4==par-stroke){ 
System.out.println("four-over-par"); 
run=false; 
     } 
else 
if (-5==par-stroke){ 
System.out.println("five-over-par"); 
run=false; 
     } 
else 
if (-6==par-stroke){ 
System.out.println("six-over-par"); 
run=false; 
     } 
else 
if (-7==par-stroke){ 
System.out.println("seven-over-par"); 
run=false; 
     } 
else{ 
System.out.println("Better luck next time"); 
run=false; 
     } 
      run=false; 
     } 


    if (run==false) 
    System.out.println("Run again? "); 
    char again = kb.next().charAt(0); 
     if (again == 'y') 
     { 
     run=true;} 
     else if (again == 'n') 
     { 
     System.out.println("Goodbye."); 
     go = false;} 
     else 
     { 
     System.err.println("Invalid answer"); 
     }} 
    } 
    } 
+0

Благодарим вас. Теперь он отлично работает. –

+0

@ user2099733 welcome;) –

0

Если я могу дать некоторые указатели, вам здесь не нужны два цикла. Вам действительно нужен один (скажем, внешний, цикл «идти»).

Ваша логика должна быть затем, как это ...

boolean go = true; 
    while (go) { 
     // get input... 
     // compute the result for this hole... 
     // get user input... 
     // decide whether to go again (go = false; or go = true;) 
    } 

Будьте осторожны в фигурных скобках. Как и другие люди, начните с правильного отступов кода.

1

Несколько вещей, не так с вашим кодом.

  1. внешний контур идут довольно бесполезно, поэтому удалить его полностью
  2. ваш, если в другом месте блоки супер некрасиво выглядит. заявления переключателя не более кратким
  3. нет реального смысла устанавливать пробег = ложный каждый случай, просто сделать это в конце
  4. Ваш ответ будет выйти на неверный знак

Я изменил код, приведенный ниже. У вас есть взгляд.

import java.util.Scanner; 
class GolfEM 
{ 
    public static void main (String[] args) 
    { 
     Scanner kb = new Scanner(System.in);  
     boolean run = true; 

     while (run) 
     { 
      System.out.println("Enter par for the hole: "); 
      int par = kb.nextInt(); 
      System.out.println("Enter the number of strokes: "); 
      int stroke = kb.nextInt();     

      if (stroke==1) { 
       System.out.println("hole in one"); 
       run=false; 
      } 
      else{ 
       switch(par-stroke){ 
        case 3: 
         System.out.println("double eagle"); 
         break; 
        case 2: 
         System.out.println("eagle"); 
         break; 
        case 1: 
         System.out.println("birdie"); 
         break; 

        case 0: 
         System.out.println("par"); 
         break; 
        case -1: 
         System.out.println("bogey"); 
         break; 
        case -2: 
         System.out.println("double-bogey"); 
         break; 
        case -3: 
         System.out.println("triple-bogey"); 
         break; 
        case -4: 
         System.out.println("four-over-par"); 
         break; 
        case -5: 
         System.out.println("five-over-par"); 
         break; 
        case -6: 
         System.out.println("six-over-par"); 
         break; 
        case -7: 
         System.out.println("seven-over-par"); 
         break; 
        default: 
         System.out.println("Better luck next time"); 

       } 

      }       
      run=false;   

      while(1){ 
       System.out.println("Run again? "); 
       char again = kb.next().charAt(0); 
       if (again == 'y') 
       { 
       run=true; 
       break; 
       } 
       else if (again == 'n') 
       { 
       System.out.println("Goodbye."); 
       break; 
       } 
       else 
       { 
        System.err.println("Invalid answer"); 
       } 
      } 
     } 
} 

} 
0

Я действительно не вижу, что такое внутренняя петля run. Он работает ровно один раз, а затем run установлено в значение false. Однако я буду считать, что ваш код является предварительным и эта часть будет заполнена позже.

О вашей реальной проблеме: Ваша программа работает в бесконечном цикле, потому что часть, запрашивающая у пользователя, следует ли запускать программу снова, - вне цикла go. Просто переместите ту часть «фигурная скобка», и все будет хорошо.

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