繁体   English   中英

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

[英]How do I prompt the user to run program again?

经过数小时的研究,我能够提出一个有帮助的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");
        }
    }
}

您的代码有些错误。

  1. 外部go循环非常没用,因此将其完全删除
  2. 您的if else块看起来非常难看。 Switch语句更加简洁
  3. 在每种情况下都没有设置run = false的实际意义,只需在最后完成
  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");
                }
            }
        }
}

}

如果我可以给出一些指针,则这里不需要两个while循环。 您实际上只需要一个(比方说,外面的一个,即“ go”循环)。

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

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

注意大括号。 像其他人建议的那样,从正确缩进代码开始。

正如其他成员建议的那样,使用适当的缩进。

在这里,您只是放了几个牙套。

更正的代码:

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

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

关于您的实际问题:您的程序在无限循环中运行,因为询问用户是否再次运行该程序的部分不在 go循环中。 只需将第一部分“大括号”向上移动,就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM