我正在输入以下内容:
出于某种原因,出现了成本提示,下一个输出行出现在同一行。有人可以帮助我发现我的错误吗?
public class SalesTax {
public static void main(String[] args) {
// Input items for shopping cart
HashMap<String, String> cart = new HashMap<String, String>();
// Create a Scanner
Scanner input = new Scanner(System.in);
// variables
char done;
boolean goods;
double tax;
// Pick items for list.
do {
System.out.print("Please enter an item.");
String item = input.next();
System.out.print("Please enter the price for "+ item + ": ");
String price = input.next();
if (item.contains("book")) {
goods = false;
} else if(item.contains("chocolate")) {
goods = false;
} else if(item.contains("pill")) {
goods = false;
}
cart.put(item, price);
System.out.print("Would you like to continue to add items? (Type Y) for Yes and (Type N) for No.");
done = input.next().charAt(0);
} while(Character.toUpperCase(done) == 'Y');
}
}
答案 0 :(得分:2)
<强>问题:强>
String item = input.next();
当您输入music cd
时,item
会消耗音乐,而price
会消耗 cd ,因此会跳过它
<强>溶液强>
你需要调用input.nextLine();
来使用整行字符串
答案 1 :(得分:0)
您正在使用System.out.print()
而不是使用System.out.println();
print()
只打印单词并保持在同一行。
println()
将打印整行,光标将转到第二行。
当你把它写成
时,不要在阅读时使用这些空格 input.next();
next()和hasNext()方法及其原始类型的伴随方法(例如nextInt()和hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 hasNext和next方法都可能阻止等待进一步输入。 hasNext方法块是否与其关联的下一个方法是否会阻塞无关。
修改强> 只需将声明更改为此。
Scanner s = new Scanner(input).useDelimiter("\n");
它会将分隔符更改为新行并读取完整的行。
答案 2 :(得分:0)
默认情况下,next()
只是输入到空格,因此您必须使用nextLine()
代替,这将在整个输入行中读取到回车符。
答案 3 :(得分:0)
使用input.nextLine()
从键盘读取整行。表示用户键入的内容,直到用户按下回车键。
我不明白的一件事是,在你的代码中使用它有什么用?
if(item.contains("book"))
{
goods = false;
}
else if(item.contains("chocolate"))
{
goods = false;
}
else if(item.contains("pill"))
{
goods = false;
}
??? 你能解释一下吗?
谢谢,