1

我应该制作一个程序来持续接受办公桌订单数据并显示超过 36 英寸长且至少有一个抽屉的橡木办公桌的所有相关信息。

import java.util.*;

public class MangMaxB 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        char ans;
        int orderNum=0, length=0, width=0, numDrawer=0, price=1000;
        String name;

        System.out.print("Do you wish to enter Oak " +
                        "desk order data? (y/n)");
        ans = input.nextLine().charAt(0);

        while (ans != 'n')
        {  
            System.out.print("Enter customer name: ");
            name=input.nextLine();

            System.out.print("Enter order number: ");
            orderNum=input.nextInt();    

            System.out.print("Enter length and width of Oak desk" +
                        " separated by a space: ");
            length = input.nextInt();
            width = input.nextInt();

            System.out.print("Enter number of drawer/s: ");
            numDrawer=input.nextInt();

            if ((length>36)&&(numDrawer>=1))
            {
                if ((length*width)>750)
                {
                    price+= 250;
                }

                price+= (numDrawer*100);
                price+= 300;

                System.out.println("\nOak desk order information:\n" 
                        + "Order number: " + orderNum + "\n"
                        + "Customer name: " + name + "\n"
                        + "Length: " + length + ", width: "
                        + width + ", surface: " + (length*width)
                        + "\n" + "Number of drawer/s: " + numDrawer
                        + "\nPrice of the desk is P " + price);
            }

            else
            {
                System.out.println("\nOak desk order isn't over 36 " +
                        "inches long and doesn't have a drawer");
            }

            System.out.print("Any more items? (y/n) ");
            ans = input.nextLine().charAt(0);
        }
    }
}

我能够输入数据并显示它,但在第二次尝试时,因为它是一个循环,它不起作用。

它说“线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:controlStruc.MangMaxB.main 的 java.lang.String.charAt(Unknown Source) 处为 0”

我该如何解决?

4

4 回答 4

6

nextInt()不读取行尾 - 只是下一个整数。如果您想阅读该行的其余部分,您需要调用nextLine()after 。nextInt()

目前,你还没有这样做,所以最后一个nextLine()方法只是读取整数之后的剩余空行,并立即返回一个空字符串,从而导致异常。

在这种情况下,在nextLine()这里打电话应该可以解决问题:

System.out.print("Enter number of drawer/s: ");
numDrawer=input.nextInt();
input.nextLine(); //Added nextLine() call
于 2013-04-12T14:34:53.363 回答
0

你只是按回车吗?

ans = input.nextLine().charAt(0);

当它是一个空字符串时抛出此错误。你的例外清楚地告诉你这一点。您需要检查“nextLine”是否为空字符串。

于 2013-04-12T14:32:59.143 回答
0

请像下面这样使用,

System.out.print("Any more items? (y/n) ");  
input = new Scanner(System.in);  
ans = input.nextLine().charAt(0);

因为 input.nextLine() 返回空字符串,所以当尝试获取第 0 个字符时,它返回 StringIndexOutOfBoundsException 您需要在调用 input.nextLine() 之前获取一个字符串

于 2013-04-12T14:59:41.840 回答
0

清楚地根据documentaion:

nextLine()-Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.

nextInt()-Scans the next token of the input as an int.

从今以后ans = input.nextLine(),您的代码中将返回您''char(0)StringIndexOutOfBoundsException.

于 2013-04-12T15:16:01.757 回答