如何提示用户再次运行程序?

时间:2013-02-22 14:49:26

标签: java

经过数小时的研究,我能够提出一个应该有用的while循环。唯一的问题是它循环并且不会要求用户再次运行。它只是一遍又一遍地循环高尔夫球。谁能指出出了什么问题?目前在初级班级,所以我可能不了解很多。

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");
        }
    }
}

4 个答案:

答案 0 :(得分:1)

您的代码有些问题。

  1. 外部循环非常没用,所以完全删除它
  2. 你的if else块看起来非常难看。切换语句更简洁
  3. 没有真正的意义在每种情况下设置run = false,只是在最后设置
  4. 您的回复将退出无效字符
  5. 我更改了以下代码。有一个看起来。

    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");
                    }
                }
            }
    }
    
    }
    

答案 1 :(得分:0)

如果我可以提供一些指示,那么这里不需要两个while循环。你真的只需要一个(比方说,外部的,'去'循环)。

你的逻辑应该是这样的......

    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;)
    }

小心花括号。像其他人建议的那样,首先要正确缩​​进代码。

答案 2 :(得分: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");
        }}
    }
  }

答案 3 :(得分:0)

我真的没有看到内部run循环的用途。它只运行一次,然后run设置为false。但是,我会假设您的代码是初步的,并且此部分将在稍后填写。

关于您的实际问题:您的程序在无限循环中运行,因为询问用户是否再次运行程序的部分是go循环的外部。只需将第一部分“大括号”提升,你应该没事。