java - 使用 .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] = fname
,customerData[i][1] = lname
等等。我试过玩弄.nextLine
数组大小,但我相信问题源于address
.
解决方案
因此,您可以在此处创建客户数据:
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
创建;也许它被重用但同时意外关闭?)我们只能做出合理的猜测。
推荐阅读
- c# - 无法加载 DLL 'Magick.NET-Q16-x86.Native.dll':找不到指定的模块
- php - 我应该如何重写此方法以获取更多参数
- python - python如何处理产生的字典
- javascript - function foo({ defaultValue = {} } = {}) 中的语法是什么意思?
- swift - 在字符串 Swift 中为单个字符设置动画
- rust - 请解释“由于要求冲突,无法推断借用表达式的适当生命周期”错误
- sapui5 - 多种语言的表单内容:视图行为和模型处理
- swift - 如何进行正确的授权
- android - 我的导航抽屉中片段中的按钮不起作用。应用程序崩溃
- python - 为什么除法与乘法的时间相似?