[英]Unable to break out of For Loop in Java
我是一个初学者,正在制作一个小程序来练习我所学的内容。 我正在编写代码来检查学生的成绩。
这是代码:
导入java.util。*;
public class Grader {
public static void main(String[] args) {
String studentName;
int rollNo = 0;
Scanner inputter = new Scanner(System.in);
System.out.println("Please enter the roll number of the student: ");
rollNo = inputter.nextInt();
System.out.println("Thank you. Now, please enter the student's name: " );
studentName = inputter.next();
for(int i=0; ; i++){
System.out.println("Please enter a valid examination type, i.e FA or SA: ");
String examType = inputter.next();
examType = examType.toUpperCase();
if(examType == "FA" || examType == "SA"){
break;
}
}
}
}
我面临的问题是,即使我输入了有效的examType,For循环也不会中断。
您需要使用String.equals()
。
Scanner.next()
返回一个String
。 在字符串上使用==
不会产生任何错误,但会测试引用相等性而不是值相等性。 即使字符串的值相等,它也不会返回true
。
正确的代码:
if(examType.equals("FA") || examType.equals("SA")){
break;
}
编辑
OP在一条评论中提到,循环要运行直到结束break
才结束。 您可以通过以下两种方式之一创建无限循环:
for(;;){
//runs infinitely
}
要么
while(true){
//runs infinitely
}
这两个无限循环都被break
。 另外,由于没有计数器变量,因此您使用的内存更少(尽管差异很小且几乎无关紧要)。 在极不可能的情况下,用户输入无效输入的次数太多,以至于整数溢出,没有变量消除了这种风险。 您也节省了处理器时间,因为没有指令分配内存或在数字上加一个。
public static void main(String args[]) {
String studentName;
int rollNo = 0;
Scanner inputter = new Scanner(System.in);
System.out.println("Please enter the roll number of the student: ");
rollNo = inputter.nextInt();
System.out.println("Thank you. Now, please enter the student's name: " );
studentName = inputter.next();
for(int i=0; ; i++){
System.out.println("Please enter a valid examination type, i.e FA or SA: ");
String examType = inputter.next();
examType = examType.toUpperCase();
if(examType.equals("FA") || examType.equals("SA")){
break;
}
}
}
一切正常。
您没有设置限制,例如
for(int i = 0; i < somevalue; i++)
否则,while循环可能是更好的选择,例如:
while(examType.equals("FA") || examType.equals("SA")
为了实现最佳编码实践,根据Sonar合规性标准,对字符串使用equals操作,如下面的代码片段所示。
(“ SA” .equals(examType))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.