首页 > 解决方案 > 使用 .nextLine() 在数组跳行中存储值

问题描述

我之前的问题已关闭,但建议的答案对我没有多大帮助。带来不便敬请谅解。

我正在尝试将fname, lname, address, city, state, 和存储zip在数组中customerData[30][6]。但是,它似乎跳过了我输入信息的行。

代码

public void addCustomer() throws IOException {
        Scanner scan = new Scanner(System.in);
        int numCustomers = 0;
        String[][] customerData = new String[30][7];

        System.out.println("how many customers");
        numCustomers = scan.nextInt();

        BufferedWriter writer = new BufferedWriter(
                new FileWriter("/Users/simonshamoon/eclipse-workspace/Final Project/src/customerdata.txt"));

        BufferedWriter loginWriter = new BufferedWriter(
                new FileWriter("/Users/simonshamoon/eclipse-workspace/Final Project/src/userlogin.txt"));

        for (int i = 0; i < numCustomers; i++) {

            System.out.println("enter customer data (fname, lname, address, city, state, zip)");

            for (int j = 0; j < customerData[i].length; j++) {
                customerData[i][j] = scan.nextLine();

            }
            writer.write(customerData[i][0] + ", " + customerData[i][1] + ", " + customerData[i][2] + ", "
                    + customerData[i][3] + ", " + customerData[i][4] + ", " + customerData[i][5] + "\n");

            loginWriter.write(customerData[i][0].charAt(0) + customerData[i][1] + ", " + rand.nextInt(10001) + "ASU"
                    + ", Customer" + "\n");

        }

        writer.flush();
        writer.close();
        loginWriter.flush();
        loginWriter.close();

    }

输出

how many customers
1
enter customer data (fname, lname, address, city, state, zip)
fname
lname
123 address dr
city
state
zip
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:709)
    at Employee.addCustomer(Employee.java:156)
    at Employee.displayEmployeeMenu(Employee.java:196)
    at BasicMethods.promptUser(BasicMethods.java:48)
    at Shop.main(Shop.java:8)

我想要它customerData[i][0] = fnamecustomerData[i][1] = lname等等。我试过玩弄.nextLine数组大小,但我相信问题源于address.

标签: javaarraysmethodsjava.util.scanner

解决方案


因此,您可以在此处创建客户数据:

for (int j = 0; j < customerData[i].length; j++) {
    customerData[i][j] = scan.nextLine();
}

这是使用的编写器代码charAt

loginWriter.write(customerData[i][0].charAt(0) + customerData[i][1] + ", " + rand.nextInt(10001) + "ASU" + ", Customer" + "\n");

所以它看起来像customerData[i][0]一个空字符串,因为它是charAt引发索引异常的唯一用途。

我建议您要么输出您的个人数据项,要么更好的是,使用调试器逐步执行您的代码。

由于您没有显示周围的代码(如何scan创建;也许它被重用但同时意外关闭?)我们只能做出合理的猜测。


推荐阅读