不太确定这有什么问题。我也尝试过do-while和switch,但似乎没有任何工作。有什么我想念的吗?当代码执行并且用户输入Y继续时,它就会结束,但我需要它返回到开头,以便用户可以输入另一个等级。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter your grade: ");
double grade = input.nextDouble();
while (grade >=0 &&grade <=100)
if(grade<=100&&grade>=90)
{
System.out.println("Your grade is an A"); break;
} else if (grade <=89&&grade>=80){
System.out.println("Your grade is a B"); break;
} else if (grade <=79&&grade>=70) {
System.out.println("Your grade is a C"); break;
} else if (grade <=69&&grade>=60) {
System.out.println("Your grade is a D"); break;
} else if (grade <=59) {
System.out.println("Your grade is an F");break;
}
System.out.println("Do you want to continue (Y/N)?");
char check = input.next().charAt(0);
}
}
答案 0 :(得分:3)
您可能希望在while之前声明char check = 'Y'
,然后将while之后的语句括在大括号中,如下所示:
while (check =='Y' && grade >=0 && grade <=100) {
...
}
此外,您需要删除break;
语句,因为它将从循环中退出。
答案 1 :(得分:1)
您当前实施的问题在于,首先,您不要让用户插入多个成绩,方法是破坏每个if
语句。
回到最初的单词,关于使用成绩插入重新开始的用户输入不在循环内处理。应该使用do-while
循环。
public static void main(String[] args) {
boolean flag = false;
Scanner input = new Scanner(System.in);
double grade;
do {
System.out.println("Enter your grade: ");
grade = input.nextDouble();
if (grade <= 100 && grade >= 90) {
System.out.println("Your grade is an A");
} else if (grade <= 89 && grade >= 80) {
System.out.println("Your grade is a B");
} else if (grade <= 79 && grade >= 70) {
System.out.println("Your grade is a C");
} else if (grade <= 69 && grade >= 60) {
System.out.println("Your grade is a D");
} else if (grade <= 59) {
System.out.println("Your grade is an F");
}
System.out.println("Do you want to continue (Y/N)?");
char check = input.next().charAt(0);
if (check == 'Y') {flag = true;}
else {flag = false;}
} while (grade >= 0 && grade <= 100 && flag == true);
}
一般来说,上述(打破if-else
语句)被认为是一种不好的做法,我预见到您混淆了switch
语句与if-else
的用法。
在switch
语句中,使用break
,因为我们只希望满足其中一个检查条件。如果break
缺席,一旦与案件匹配,执行将继续执行在匹配案例下面写下的其余案例。
另一方面,if-else
代码只会输入匹配且不会执行任何其他if-else
语句的语句,直到最后if-else
结尾(或者else
)语句,所以,这里没有必要使用break
,因为编译器本身知道如果它在if
语句上匹配,它将在结束后移动在执行匹配的if
(或if-else
或else
)语句后,该块的内容。
this是关于我前面提到的话语的进一步参考。
答案 2 :(得分:0)
也许试试这个:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(true) {
System.out.println("Enter your points: ");
double grade = input.nextDouble();
if(grade >= 0 && grade <= 100) {
if(grade >= 90)
{
System.out.println("Your grade is an A");
}
else if(grade >= 80)
{
System.out.println("Your grade is a B");
}
else if(grade >= 70)
{
System.out.println("Your grade is a C");
}
else if(grade >= 60)
{
System.out.println("Your grade is a D");
}
else
{
System.out.println("Your grade is an F");
}
} else {
System.out.println("Only points between 0 and 100 are allowed.");
}
char check;
do {
System.out.println("Do you want to calculate another grade (Y/N)?");
check = input.next().charAt(0);
} while(Character.toUpperCase(check) != 'Y' && Character.toUpperCase(check) != 'N');
if(Character.toUpperCase(check) == 'N')
break;
}
}
您可以在此处轻松使用无限循环,只要您像上次检查一样添加适当的退出点。
如果if语句的顺序正确,则无需检查每类点的两个边界。最后一个else-if也不是必需的,也可能是危险的,因为在绑定错误的情况下,你不会获得某些输入的任何输出。
我还为Y / N问题添加了Character.toUpperCase()
,因为我觉得这很方便。
答案 3 :(得分:0)
作为一般经验法则,请不要break;
&#39;没有循环。你的循环控件和条件应该足够强大,不需要使用break
。
我知道你的解决方案已经解决了,但是给一个人一条鱼,教一个人钓鱼......你知道其余的。
让我们浏览您的代码。
等级在可接受的参数范围内,让我们进入while循环! (不要忘记第一次大括号!)
while(表达式){}
第一个条件=假,所以跳到第二个条件(等级&lt; = 89&amp;&amp; grade&gt; = 80)PASS!
节目打印 - &#34;您的成绩是B&#34; break;
程序以代码0退出。
break
发生了sucka! break
会强制你正在运行的进程停止。在这种情况下循环。 continue;
将跳过循环中的其余代码,并在下一次迭代时重新启动循环。事实是,这些都不适合您的代码。
你的解决方案的另一个问题是没有办法继续循环,因为没有任何反馈到顶部。此时你应该提示用户输入(你想继续y / n)
if (y) please enter another grade
grade = input.nextDouble();
else
grade = -1;
通过将等级设置为-1,您将使while (grade >=0 &&grade <=100)
评估为false,从而以更自然,更易读的方式退出循环。
我认为重要的是要避免在任何不必要的地方使用休息。你以后会为自己节省很多痛苦。