gpt4 book ai didi

java - Else If 和 Do while 没有按预期工作

转载 作者:行者123 更新时间:2023-11-29 10:05:26 25 4
gpt4 key购买 nike

编辑:我最近在编译一个我知道无法编译的程序时发生的事情让我相信我的编译器同时遇到了问题。毫无疑问,由于我在 Mac 上的 WINE 中运行它而不是 native 应用程序。谢谢你的回复。当我用编译器修复了上述错误,或者我将计算机移至一台可以正常工作的计算机时,我将正确测试所有响应并进行所有更改。

我对编程和这个网站还比较陌生,所以请多多包涵。我的两个 If 语句出错,一个 do/while 我无法解决。

整个程序按预期工作,但下面有两个 block 。问题是,当我输入字符“y”时,一切都按预期工作,并且 ("Results ="+ Arrays.toString(row)) 按我的预期打印。它还继续执行原始 For 循环并再次启动程序。

但是,当我输入任何其他字符(即不是“y”或“n”)时,代码不会打印“输入必须是‘y’或‘n’”,而是等待另一个输入。即使输入“n”,它也不会像我想要的那样退出循环,它只是继续循环,而不是继续进行到 else,如果我认为它会的话。它无限期地执行此操作,不接受除“y”之外的任何其他输入以继续通过循环,因此我永远不会收到打印“否定”。

有人知道为什么会这样吗?虽然不是技术作业,但我将其标记为我想知道的,如果可能的话,发生了什么,而不是仅仅如何修复它。

        do {
ans = input.next().charAt(0);
if (!ans.equals('y') || !ans.equals('n')) {
System.out.println ("Input must be either 'y' or 'n'");
}
} while (!ans.equals('y') || !ans.equals('n'));

if (ans.equals('y')) {
for (Object[] row : prevResults) {
System.out.println("Results = " + Arrays.toString(row));
}
} //
else if (ans.equals('n')) {
System.out.println("Negative");
//System.exit(0);
}

完整代码如下

import java.util.*;

public class Averages {
public static void main (String [] args) {

//declare variables
int course, exam, average = 0;
char ans;
String pass;

//creating objects
Scanner input = new Scanner(System.in);
List<Object[]> prevResults = new ArrayList<Object[]>();

//full loop
for (int i = 0; i < 5; i++ ) {

System.out.println ("Loop " + (++i) + " out of 5");

//Course loop
do {
System.out.println ("Please enter a course mark out of 100");
course = input.nextInt();
if (course > 100) {
System.out.println ("Number entered is over 100");
}
} while (course > 100);

//Exam loop
do {
System.out.println ("Please enter an exam mark out of 100");
exam = input.nextInt();
if (exam > 100) {
System.out.println ("Number entered is over 100");
}
} while (exam > 100);


average = (course + exam)/2;

// Final Grade
System.out.println ("The average mark is " + average);

if ( average >= 50 && course > 40 && exam > 40) {
System.out.println ("The final grade is pass");
pass = "Pass";
}
else {
System.out.println ("The final grade is fail");
pass = "Fail";
}

//add to array
prevResults.add(new Object[] { "Course mark: " + course, "Exam mark: " + exam,"Average: " + average, "Grade: " + pass});


System.out.println ("Would you like to see previous results? y/n");


//'Previous results' question loop
do {
ans = input.next().charAt(0);
if (!ans.equals('y') || !ans.equals('n')) {
System.out.println ("Input must be either 'y' or 'n'");
}
} while (!ans.equals('y') || !ans.equals('n'));


// Close or Array if statement
if (ans.equals('y')) {
for (Object[] row : prevResults) {
System.out.println("Results = " + Arrays.toString(row));
}
} //
else if (ans.equals('n')) {
System.out.println("Negative");
//System.exit(0);
}
}// end for
}//end main
}//end class

编辑 2: 我换了台电脑,所有建议的答案都确实有效。他们是

while (ans != 'y' && ans != 'n');

while (!(ans.equals('y')  ||  ans.equals('n')));

按照 Chris Browne 的建议制作一个单独的方法。

为了阅读本文的任何其他人的利益,这些解决方案非常有效,尽管我没有时间查看 Greg Hewgill 建议的 BufferedReader 我很可能会实现它,因为从他所说的来看它似乎是一个更好的选择.

最佳答案

首先,你的代码有一个错误:

System.out.println ("Loop " + (++i) + " out of 5");

你不应该递增 i 因为它已经在你的 for 更新语句中递增 - 结果你得到了错误的迭代计数。

接下来,您不应该使用equals 来比较char 值——请改用==。当你使用 equals 时,由于 auto-boxing 会发生很多不必要的事情,最终导致大致 characterObject.equals(anotherCharacterObject),对象类型为 java.lang.Character。只需使用例如ans == 'y' 代替。

最后,正如人们所指出的,您应该将 do-while 重写为:

do {
ans = input.next().charAt(0);
if (ans != 'y' && ans != 'n') {
System.out.println ("Input must be either 'y' or 'n'");
}
} while (ans != 'y' && ans != 'n');

或者甚至有一个单独的方法来进行条件检查(感谢 Chris Browne)。

关于java - Else If 和 Do while 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com