- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:我最近在编译一个我知道无法编译的程序时发生的事情让我相信我的编译器同时遇到了问题。毫无疑问,由于我在 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/
我对java有点陌生,所以如果我犯了一个简单的错误,请原谅我,但我不确定我哪里出错了,我收到的错误是“预期的.class,预期的标识符,而不是声明, ';'预期的。”我尝试了不同的方法,并从这些方法中
This question already has answers here: chai test array equality doesn't work as expected (3个答案) 3年前
我正在学习 Java(对不起,我的英语很差,这不是我的母语),当我在 Eclipse (JavaSE-1.7) 中在我输入的每个“try”中执行“try-finally” block 时,会出现以下消
我收到两个错误,指出 token 上的语法错误,ConstructorHeaderName expected instead & token “(”上的语法错误,< expected 在线: mTM.
我找不到错误。 Eclipse 给我这个错误。每个 { } 都是匹配的。请帮忙。 Multiple markers at this line - Syntax error on token “)”,
代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DoubleIt extends
我正在用 python(Vs 代码)编写代码,但出现此错误: Expected ")" Pylance 错误发生在:def main() 我试着运行我的 main 并将它打印到我的屏幕上。我用谷歌搜
我正在尝试按照 documentation 中的建议使用异步函数。但我收到此错误 意外的 token ,预期 ( async function getMoviesFromApi() { try
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
第一行包含一个表示数组长度的整数p。第二行包含用空格分隔的整数,这些整数描述数组中的每个元素。第三行打印一个整数,指示负数组的数量。 package asgn3; import java.util.*
好的,我是初学者,我必须修复此 java 表达式语言代码才能在我的系统 (Windchill) 中工作,但看起来我在语法中遗漏了一些内容: LWCNormalizedObject lwc =
我无法编译我的程序! 我想我缺少一个花括号,但我怎么也看不出在哪里! import javax.swing.*; import java.awt.*;
我的 jQuery 代码有问题,我的 Firebug 向我发出警告:需要选择器。 这是代码: $("img[id$='_tick']").each(function() { $(this).c
我的新类(class) Fountainofyouth 遇到了问题。尝试构建整个项目后,调试器显示 warning: extended initializer lists only available
我已经从 Java 转向 CPP,并且正在努力围绕构造构造函数链进行思考,我认为这是我的问题的根源。 我的头文件如下: public: GuidedTour(); GuidedTour(string
鉴于以下 for(var i=0; i< data.cats.length; i++) list += buildCategories(data.cats[i]); jsLint 告诉我 Expect
我有这个 json,但 Visual Studio Code 在标题中给了我警告。 [ { "title": "Book A", "imageUrl": "https:
我正在尝试编写一个有条件地禁用四个特殊成员函数(复制构造、移动构造、复制赋值和移动赋值)的包装类,下面是我用于测试目的的快速草稿: enum class special_member : uint8_
所以我用 F# 编写了一个非常简单的程序,它应该对 1000 以下的所有 3 和 5 的倍数求和: [1..999] |> List.filter (fun x -> x % 3 = 0 || x %
我是一名优秀的程序员,十分优秀!