条件不会在 do while 语句中读取

Conditional wont be read in do while statement

对于我的程序,我试图让循环 运行 直到输入字母 n。但出于某种原因,我不断收到错误消息,无法在我的循环条件中找到符号。非常感谢所有帮助。

import java.io.*;
import java.util.*;
public class Prog213c
{
  public static void main(String[] args) {

        Scanner kbReader=new Scanner(System.in); 

        do{
            System.out.println( "Enter student number");
            int studentNumber = kbReader.nextInt();
            System.out.println(" Enter credits ");
            int credits = kbReader.nextInt();

            switch (credits) 
            {
            case 30: 
                System.out.println("Grade Level code = 2");
                break;
            case 29: 
                System.out.println("Grade Level code = 1");
                break;
            case 70:
                System.out.println("Grade Level code = 3");
                break;
            case 103:
                System.out.println("Grade Level code = 4");
                break;

            default: System.out.println("invalid number");
            }
            System.out.print("Do again(y/n)");
            String answer = kbReader.next();
        } while (answer == 'y'); // error received here

问题一: 因为 answer 是一个字符串对象,所以这不起作用 (answer == 'y');

你可以做 "y".equals(answer) 是你从扫描器中获取下一行

或者如果您需要使用字符

char x = kbReader.next().charAt(0);
while (x == 'y');

问题 2:

answer 必须在 do-while 循环之前声明...

你的最终代码看起来像

    Scanner kbReader = new Scanner(System.in);
    char answer = 'y';
    do {
        System.out.println("Enter student number");
        int studentNumber = kbReader.nextInt();
        System.out.println(" Enter credits ");
        int credits = kbReader.nextInt();

        switch (credits) {
        case 30:
            System.out.println("Grade Level code = 2");
            break;
        case 29:
            System.out.println("Grade Level code = 1");
            break;
        case 70:
            System.out.println("Grade Level code = 3");
            break;
        case 103:
            System.out.println("Grade Level code = 4");
            break;

        default:
            System.out.println("invalid number");
        }
        System.out.print("Do again(y/n)");
        answer = kbReader.next().charAt(0);
    } while (answer == 'y');  
  1. 单引号是 Java 中的字符文字。所以你不能比较一个 直接带字符的字符串。
  2. 您的答案变量必须在 do-while 循环之前声明。
  3. 你必须使用 equals method to compare stringsanswer.equals("y")

你这里有几个问题:

String answer = kbReader.next();
} while (answer == 'y'); // error received here

从技术上讲,answer 在您尝试使用时超出范围 - 您只能在循环本身内部使用 answer。您应该在开始 while 循环之前声明 answer 以便它在范围内。此外,answer 是一个字符串,您正试图 "directly" 将其与 char.

进行比较

这也是在进行区分大小写的比较;虽然这在技术上不是不正确的,但接受 "Y" 或 "y".

对用户更友好

此外,您的 switch 语句将无法正常工作。例如,仅当 credits 恰好 30 时才会调用 case 30,我认为这不是您想要的。

可以做如下事情:

case 30:
case 31:
case 32: // ...

但这似乎是一种非常痛苦的方法。有关详细信息,另请参阅 this question

This answer 特别有趣,可能对您的目的有用。这是该答案的代码:

switch ((int) num/10) {
    case 1:
        System.out.println("10-19");
        break;
    case 2:
        System.out.println("20-29");
        break;
    case 3:
        System.out.println("30-39");
        break;
    case 4:
        System.out.println("40-49");
        break;
    default:
        break;
}

(再次强调,以上不是我的代码,而是来自链接的答案)。

还有:

int studentNumber = kbReader.nextInt();

您实际上从未对 studentNumber 做任何事情,只是提示用户这样做。您是故意这样做的吗?

将您的 while 条件更改为:

while ("y".equals(kbReader.next()));