为什么getValidStr方法会变成一个无限循环? import java.util.Scanner; 公共类验证{ 公共静态void main(字符串[]args){ INTC; 字符串d; 扫描仪scnr=新扫描仪(System.in); c=getValidIntScore(scnr); d=GetValidSrName(scnr); } 公共静态int GetValidIntCore(扫描仪序列号){ INTC; System.out.println(“输入0-100之间的整数测试分数:”); c=序列号nextInt(); 而(c100){ System.out.println(“测试分数必须是0-100之间的值,包括0-100。输入测试分数:”); c=序列号nextInt(); } 返回c; } 公共静态字符串getValidStrName(扫描程序编号){ 字符串c; System.out.println(“输入学生全名:”); c=序列号nextLine(); 而(c.isEmpty()){ System.out.println(“姓名必须非空且非空。输入学生的全名:”); } 返回c; } }

为什么getValidStr方法会变成一个无限循环? import java.util.Scanner; 公共类验证{ 公共静态void main(字符串[]args){ INTC; 字符串d; 扫描仪scnr=新扫描仪(System.in); c=getValidIntScore(scnr); d=GetValidSrName(scnr); } 公共静态int GetValidIntCore(扫描仪序列号){ INTC; System.out.println(“输入0-100之间的整数测试分数:”); c=序列号nextInt(); 而(c100){ System.out.println(“测试分数必须是0-100之间的值,包括0-100。输入测试分数:”); c=序列号nextInt(); } 返回c; } 公共静态字符串getValidStrName(扫描程序编号){ 字符串c; System.out.println(“输入学生全名:”); c=序列号nextLine(); 而(c.isEmpty()){ System.out.println(“姓名必须非空且非空。输入学生的全名:”); } 返回c; } },java,Java,当我运行这个程序时,我可以很好地得到考试分数,但是当我找到学生的名字时,我甚至无法输入,它会一遍又一遍地运行。。。如何解决此问题?您在这方面有两个问题 混合nextX和nextLine而不设置分隔符 你不能把nextLine和next(其他任何东西)混在一起,否则就会出问题。听起来您希望一个输入等于一个输入。这很容易做到: 更新扫描仪,告诉它您希望它扫描换行,而不是空白。制作扫描仪(新扫描仪)后,立即运行: scanner.useDelimiter(“\r?\n”) 这表明输入由换行符分隔(按e

当我运行这个程序时,我可以很好地得到考试分数,但是当我找到学生的名字时,我甚至无法输入,它会一遍又一遍地运行。。。如何解决此问题?

您在这方面有两个问题

混合nextX和nextLine而不设置分隔符 你不能把
nextLine
next(其他任何东西)
混在一起,否则就会出问题。听起来您希望一个输入等于一个输入。这很容易做到:

更新扫描仪,告诉它您希望它扫描换行,而不是空白。制作扫描仪(
新扫描仪
)后,立即运行:

scanner.useDelimiter(“\r?\n”)

这表明输入由换行符分隔(按enter键)。所有其他解决方案(如抛出
nextLine()
调用以“重置”它)都会导致问题,如果用户在请求非整行输入时输入空格分隔的内容(尽管这是非常常见的建议,但分隔符的内容更简单,在这种情况下不会失败)

不在循环中重新读取 计算机按要求去做

你在问:嘿,只要
c
是空的,就执行以下操作:打印出c不是空的


所以,它会一遍又一遍地发送垃圾邮件。c是空的,并且将永远是空的,这就是为什么它会这样做。您必须更新该while块中的c,例如,使用
c=scanner.nextLine()

我已经向你发布了相同的答案,但不知道为什么会投反对票
import java.util.Scanner;

public class ValidateMe {
public static void main(String[] args) {
    int c;
    String d;

    Scanner scnr = new Scanner(System.in);

    c = getValidIntScore(scnr);
    d = getValidStrName(scnr);
}
public static int getValidIntScore(Scanner scnr){
    int c;

    System.out.println("Enter an integer test score between 0-100 inclusive:");
    c = scnr.nextInt();

    while (c < 0 || c > 100) {
        System.out.println("Test score must be a value between 0-100 inclusive. Enter the test score:");
        c = scnr.nextInt();
    }
    return c;
}

public static String getValidStrName(Scanner scnr){
    String c;

    System.out.println("Enter student's full name:");
    c = scnr.nextLine();

    while (c.isEmpty()){
        System.out.println("Name must be non-empty and non-blank. Enter the student's full name:");
    }
    return c;
}
}