java - 字符串空白在对象数组中抛出错误

标签 java

我正在尝试将书名“hoopa doopa”输入到我的对象数组中。当我尝试时,它会抛出 java.util.InputMismatchException。如果我输入一个没有空格(如“hoopa”)的字符串,则代码将始终运行良好。造成这种情况的原因是什么以及如何解决它?请帮忙谢谢

    import java.io.*;
    import java.util.Scanner;
    public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner  input = new Scanner(System.in);
    int counter = 0;
    int numberOfProducts=0; //variable for when the user is asked to enter    input the number of products to be entered

    do {                                                               //this will validate the user input
        System.out.println("How many products would you like to enter");
        while (!input.hasNextInt()) {
            System.out.println("That's not a number!");
            input.next(); // this is important!
        }
        numberOfProducts = input.nextInt();
    } while (numberOfProducts <= 0);

                                        //end of   the do while loop




    Products[] products;
    products = new Products[numberOfProducts+4];//create a array the size of   the user input that was gathered
    for (int i=0;i<numberOfProducts;i++)
    {
        products[i+4]= new Products();  // create each actual Person
        System.out.println("What is the product #: ");
        products[i+4].setItemNumber(input.nextInt());
        System.out.println("What is the book name: ");
        products[i+4].setNameOfProduct(input.next());
        System.out.println("How many are in stock: ");
        products[i+4].setUnitsInStock(input.nextInt());
        System.out.println("What is the cost of the Item: ");
        products[i+4].setPrice(input.nextDouble());
        counter++;




    }




     products[0] = new Products(0001,"The Red Rose",1,29.99);
     products[1] = new Products(0002,"The Bible",3,11.99);
     products[2] = new Products(0003,"End of the Programm",2,29.99);
     products[3] = new Products(0004,"WHAT!!! the....",1,129.99);
    //____________________________________________________________4 products that are already made

     for (int i=0;i<numberOfProducts+4;i++) 
     {
         System.out.println(products[i].toString());
         input.nextLine();

     }


    }

    }

这是另一个类 导入java.text.NumberFormat;

    public class Products 
    {
private int itemNumber;
private String nameOfProduct;
private int unitsInStock;
private double unitPrice;

public Products()
{
itemNumber = 0;
nameOfProduct = null;
unitsInStock = 0;
unitPrice = 0.0;
}

public Products(int num,String name,int inStock,double price)
{
    itemNumber = num;
    nameOfProduct = name;
    unitsInStock = inStock;
    unitPrice = price;
}

public int getItemNumber() 
{
    return itemNumber;
}

public void setItemNumber(int newValue) 
{
    itemNumber=newValue;
}
    //----------------------------------------------
    public String getNameOfProduct() 
{
    return nameOfProduct;
}

public void setNameOfProduct(String newValue) 
{
    nameOfProduct=newValue;
}
    //----------------------------------------------
    public int getUnitsInStock()
{
    return unitsInStock;
}
public void setUnitsInStock(int newValue)
{
    unitsInStock = newValue;
}
    //-----------------------------------------------
    public double getPrice()
{
    return unitPrice;
}
public void setPrice(double newValue)
{
    unitPrice = newValue;
}
    //_______________________________________________   


 public double calculateTotalItemValue() //method that uses quantity on hand and   price part3 1.A
 {
        return getUnitsInStock()* getPrice();

 }//end of method



 @Override
    public String toString() 
 {
        NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
        return"\nItem Number: "+getItemNumber() +
        "\nItem Name: "+getNameOfProduct()+
         "\nItem Quantity: " +getUnitsInStock()+
        "\nItemPrice:" +currencyFormat.format(getPrice())
        +"\nValue of Inventory: "    +currencyFormat.format(this.calculateTotalItemValue());//part3 1.B


   }

    }

最佳答案

由于您使用的是 next() 方法,因此扫描程序会将书名中的空格视为分隔符。因此,当您去读取 nextInt() 来获取库存数量时,Scanner 索引位于书名 String 中的空格之后,并提取剩余的 String 数据,该数据不会转换为 int。相反,尝试这样的事情:

System.out.println("What is the book name: ");
input.nextLine();
products[i+4].setNameOfProduct(input.nextLine());

如果您不添加 input.nextLine();,那么就会显示好像跳过了书名提示。

关于java - 字符串空白在对象数组中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20234509/

相关文章:

java - 更改抽屉导航的默认选定项目(Android - Java)

java - Maven 将具有依赖项的 jar 部署到 repo

java - spring mvc中资源的动态路径

java - Android Studio : Error:/android-studio/gradle/gradle-2. 4/lib/plugins/gradle-diagnostics-2.4.jar(没有这样的文件或目录)

java - Java 中的隐式继承

java - 分割字符串并检查它们是否是彼此的字谜

java - 列表元素未正确累积

java - java 类中的 ArrayList getter 和 setter

java - <瓷砖:insertTemplate> is slow

java - 当我将jedis放入ThreadLocal时无法成功关闭