2017-02-09 2 views
0

ユーザーがアイテム#1の名前の文字列値を入力し、アイテム#1の価格の整数値、次にアイテム#1の整数値を入力する単純なプログラムを設計しています量。プログラムをコンパイルして実行すると、アイテム#1の名前のユーザー入力を入力できますが、アイテム#2の名前は入力できません。商品価格#2と商品数量#2のユーザー入力を必要とするため、なぜこれがどういうわけかはわかりません。どうしてですか?ここでJavaの対話でユーザー入力のスキャンが許可されない

は、関連するクラスファイルの両方がある:

ItemToPurchase.java:

public class ItemToPurchase { 
    private String itemName; 
    private int itemPrice; 
    private int itemQuantity; 

public void defaultValues() { 
    itemName = "none"; 
    itemPrice = 0; 
    itemQuantity = 0; 
} 

public void setName(String newName) { 
    itemName = newName; 
} 

public String getName() { 
    return itemName; 
} 

public void setPrice(int newPrice) { 
    itemPrice = newPrice; 
} 

public int getPrice() { 
    return itemPrice; 
} 

public void setQuantity(int newQuantity) { 
    itemQuantity = newQuantity; 
} 

public int getQuantity() { 
    return itemQuantity; 

    } 
} 

そしてメインクラス -

ShoppingCartPrinter.java含むクラス:

import java.util.Scanner; 

public class ShoppingCartPrinter { 
    public static void main(String [] args) { 
    Scanner scnr = new Scanner(System.in); 
    ItemToPurchase item1 = new ItemToPurchase(); 
    ItemToPurchase item2 = new ItemToPurchase(); 

    System.out.println("Item 1"); 
    System.out.println("Enter the item name:"); 
    item1.setName(scnr.nextLine()); 
    System.out.println(item1.getName()); 

    System.out.println("Enter the item price:"); 
    item1.setPrice(scnr.nextInt()); 
    System.out.println(item1.getPrice()); 

    System.out.println("Enter the item quantity:"); 
    item1.setQuantity(scnr.nextInt()); 
    System.out.println(item1.getQuantity()); 

    System.out.println(""); 


    System.out.println("Item 2"); 
    System.out.println("Enter the item name:"); 
    item2.setName(scnr.nextLine()); 
    System.out.println(item2.getName()); 

    System.out.println("Enter the item price:"); 
    item2.setPrice(scnr.nextInt()); 
    System.out.println(item2.getPrice()); 

    System.out.println("Enter the item quantity:"); 
    item2.setQuantity(scnr.nextInt()); 
    System.out.println(item2.getQuantity()); 


    scnr.close(); 


    } 

} 

答えて

2

Scanner#nextIntメソッドが最後のnewliを消費しないためですNEご入力の文字、ひいてはその改行は回避策Scanner#nextLine

次の呼び出しで消費されています。私は私がITEM2のための文字列を入力することは許されなかった理由は、私の質問は推測Integer.parseInt(scnr.nextLine())

+0

scnr.nextInt()を交換してみてください。おそらく私はちょうどScannerがどのように機能するのか(これ以上の研究が必要な問題の一部)を知るのに苦労しているかもしれませんが、なぜインタラクション画面でそれをスキップするのでしょうか?それはnextIntに何を入力した後に暗黙の空白があるからですか? –

関連する問題