经过数小时的研究,我能够提出一个应该有用的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");
}
}
}
答案 0 :(得分:1)
您的代码有些问题。
我更改了以下代码。有一个看起来。
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
循环的外部。只需将第一部分“大括号”提升,你应该没事。