(尝试学习Java的第一天)
我有一个基本代码,接受用户输入,并检查它是否为整数,双精度或字符串(按此顺序)。当前,如果输入是整数或字符串,则可以很好地工作,但是如果是双精度/十进制,则还会触发字符串“ if”语句的代码。如果我将“ if”语句的位置切换为双精度和整数,则整数1开始触发字符串语句而不是双精度。我尝试将字符串语句放置在最顶部,因此上方没有任何内容,但这只是使字符串语句覆盖其下方的语句。
由于某种原因,不是使用“ if”语句作为字符串,而是使用“ else”(并且同时删除该语句会导致程序按预期运行),但是我想了解为什么将来会发生这种情况项目。
import java.util.Scanner;
public class second {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
System.out.print("Enter a number real quick: ");
if (userInput.hasNextInt()) {
int numberEntered = userInput.nextInt();
System.out.println("U owe me $" + numberEntered);
}
if (userInput.hasNextDouble()) {
double doubleEntered = userInput.nextDouble();
System.out.println("U owe me $" + doubleEntered);
}
if (userInput.hasNextLine()) {
String stringEntered = userInput.nextLine();
System.out.println("'" + stringEntered + "'" + " ain't a number dummy");
}
}
}
当我输入2.1时,我希望“ U欠我$ 2.1”,但我却得到“ U欠我$ 2.1” ”不是数字假人”
* edit:删除结束}时删除评论
答案 0 :(得分:0)
需要指出的事物;首先,对于多种情况,最好使用else if
而不是if
。我认为,在查看或调试它时,它会更干净,因为它与读取代码的“ else if”语句组是互斥的程序员沟通。
if (userInput.hasNextInt()) {
int numberEntered = userInput.nextInt();
System.out.println("U owe me $" + numberEntered);
} else if (userInput.hasNextDouble()) {
double doubleEntered = userInput.nextDouble();
System.out.println("U owe me $" + doubleEntered);
} else if (userInput.hasNextLine()) {
String stringEntered = userInput.nextLine();
System.out.println("'" + stringEntered + "'" + " ain't a number dummy");
}
与所需的预期结果很好地配合。
与Scanner
一起使用时,请记住:
Scanner.nextInt方法无法读取您的换行符 通过按“ Enter”创建输入,然后调用Scanner.nextLine 阅读换行符后返回。