gpt4 book ai didi

java - 为什么这个程序不能正确运行?

转载 作者:行者123 更新时间:2023-12-01 12:00:33 25 4
gpt4 key购买 nike

我有以下代码:

import java.util.Scanner;

public class Practice {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

//System.out.println("Enter quantity:");
//int quantity = input.nextInt();
//System.out.println("You entered: " + quantity);

//System.out.println("Enter price: ");
//double price = input.nextDouble();
//System.out.println("You entered: " + price);

System.out.println("Enter city: ");
String city = input.nextLine();
System.out.println("You entered: " + city);
System.out.println("Enter state code: ");
String state = input.next();
System.out.println("You entered: " + state);
}

}

当我运行程序并像这样注释掉中间部分时,它可以正常工作。但是当我取消注释它时,它会同时打印以下几行,从而弄乱了最后一个 block :

Enter city: 
You entered:
Enter state code:

为什么会发生这种情况?我该如何解决?

最佳答案

您输入了这样的内容:

12<enter>1.3<enter>AZ

对吗?

当您调用nextInt时,它读取下一个整数。所以它显示为“12”,剩下的是:

<enter>1.3<enter>AZ<enter>

现在您调用nextDouble 。它跳过第一个 并读取“1.3”( double )。剩下的是:

<enter>AZ<enter>

现在您调用nextLine ,一直读到下一个 。哦,看,你已经按下了 键!因此它读取 并返回一个空行。剩下的是:

AZ<enter>

现在您调用nextLine再次读取,直到下一个 。上面写着 AZ<enter>并返回“AZ”。

这是一个怪癖 Scanner s 和流工作。通常的解决方法是调用 nextLine紧接着 nextIntnextDouble ,并忽略结果。像这样的东西:

System.out.println("Enter quantity: ");
int quantity = input.nextInt();
input.nextLine(); // ignore newline
System.out.println("You entered: " + quantity);

System.out.println("Enter price: ");
double price = input.nextDouble();
input.nextLine(); // ignore newline
System.out.println("You entered: " + price);

关于java - 为什么这个程序不能正确运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com