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"
}
}
初始问题
我正在创建一个程序,要求用户将学生添加到 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"
}
}