繁体   English   中英

无法突破Java中的For循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM