条件不会在 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');
- 单引号是 Java 中的字符文字。所以你不能比较一个
直接带字符的字符串。
- 您的答案变量必须在 do-while 循环之前声明。
- 你必须使用 equals method to compare strings。
answer.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()));
对于我的程序,我试图让循环 运行 直到输入字母 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');
- 单引号是 Java 中的字符文字。所以你不能比较一个 直接带字符的字符串。
- 您的答案变量必须在 do-while 循环之前声明。
- 你必须使用 equals method to compare strings。
answer.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()));