Java。如何允许用户使用字符串输入跳过提示的数字要求?

Java. How to allow the user to skip a prompted numerical requirement using a string input?

初始问题

我正在创建一个程序,要求用户将学生添加到 class。学生应该有一个 id 并且可以有一个分数(双)和一个字母等级(字符串)。在下面的部分中,系统会提示用户输入双精度数据类型的分数。我想允许用户通过输入 "s" 字符串数据类型来跳过。鉴于变量 score 是双精度数据类型,如何做到这一点?

        System.out.println("Kindly input Score:    (Enter s to Skip)"); 
        score = input.nextDouble();   

输出:
请输入分数: (Enter s to Skip)

已编辑问题

现在感谢你们的反馈,我设法创建了一个字符串变量行来读取用户输入,然后检查它是否是 "S"/"s",否则将值解析为 double。现在基于这个问题,如果用户决定跳过,我如何跳过提示并继续下一个提示? 我试过使用 break;但它退出了整个循环。有没有办法跳过分数问题并继续进行字母等级问题?

// Prompting the user for Score (Numerical Grade)

System.out.println("Kindly input Score:    (Enter s to Skip)"); 
// reading the input into the line variable of string datatype
String line = input.nextLine(); 
// checking if line =="s" or =="S" to skip, otherwise
// the value is parsed into a double
if("s".equals(line) || "S".equals(line))
{
break;  // this exists the loop. How can I just skip this requirement 
        //and go to the next prompt?
}else try
{
       score = Double.parseDouble(line);                
       System.out.println(score);
} catch( NumberFormatException nfe)
{

}
// Prompting the user for Numerical Grade
System.out.println("Kindly input Grade:    (Enter s to Skip)");
String line2 = input.nextLine();
if("s".equals(line2) || "S".equals(line2))
{
       break;  // this exists the loop. How can I just skip this 
       // requirement and go to the next prompt?
}else try
{
     score = Double.parseDouble(line2);
     System.out.println(score);
} catch( NumberFormatException nfe)
{

}

您无法使用 nextDouble() 方法读取字符串。

相反,您可以读取一个字符串并尝试将其解析为双精度:

String line = input.nextLine();

if(line.equals("s")) {
    // skip the line
} else {
    try {
        double grade = Double.parseDouble(line);

        // nice, it was a double... we can work with the grade now

    } catch(NumberFormatException e) {
        // neither an "s", nor a properly formatted double.
        // Time for error handling.
    }
}

有关详细信息,请查看 JavaDoc for Double.parseDouble()

编辑: 首先检查 "s",然后解析双精度数。感谢@AndyTurner 的提示。

验证用户是否输入 "s"。如果是这样,跳过它,否则解析一个双:

double score;
String line = input.nextLine();
if ( "s".equals(line) ) {
   // skip
} else try {
   score  = Double.parse(line);
} catch ( NumberFormatException nfe ) { 
  // it wasn't a valid double... handle here
}

要跳到下一个提示只需反转逻辑,而不是测试行是否为 's',测试是否为 not 's' 以阅读值

// psuedo code
while( true ) {
    line = "enter score or s to skip".prompt()

    if (!"s".equals(line)) { // it wasn't s, read it
       score = Double.parseDouble(line)
    } else {
       ... skip or assign a default
       score = 0.0d;
    }

    line = "enter grade or s to skip".prompt()
    if ( !"s".equals(line) ) { it wasn't s, then read
      grade = line;
    } else { 
       .. skip or put default
      grade = "A"
    }

}