为什么扫描仪输入在这种特定情况下显示错误?
Why scanner input shows error in this specific case?
该程序要求用户输入一些金额,该金额将存储到一个数组中。
但就我而言,在输入金额时,程序显示错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at bankapplication.DepositWithdraw.deposit(DepositWithdraw.java:17)
at bankapplication.BankApplication.main(BankApplication.java:46)
我的代码
package bankapplication;
import java.util.*;
public class DepositWithdraw {
Scanner input = new Scanner(System.in);
int TransacNum;
double withAm;
int depAmArr[] = new int[TransacNum];
public void deposit() {
System.out.println("Depositing:\nHow many transaction you want to make? ");
TransacNum = input.nextInt();
for (int i = 0; i < TransacNum; i++) {
System.out.println("Enter amount " + (i + 1) + ":");
depAmArr[i] = input.nextInt();
}
System.out.println("You are done! Choose other option if you want to continue.\n");
}
}
[注意:此 class 及其方法将在我的主 class 中调用。我没有在这里展示我的主要class,但如果需要我会编辑post]
因为您永远不会使用从用户输入中获得的大小来初始化它。
class 初始化为所有 class 成员设置了默认值,包括 TransacNum
。 (值:0)
那些数组的大小设置为大小为0的数组。
您应该只在已知大小的情况下创建数组。 即用户输入尺码后
示例:
TransacNum = input.nextInt();
depAmArr[] = new int[TransacNum]
此外,您应该将 int depAmArr[] = new int[TransacNum];
更改为 int depAmArr[];
TransacNum
,默认情况下是 0
,直到你给它赋值。问题是你用它来初始化depAmArr
在那之前。在 TransacNum
之后初始化它,你应该没问题:
TransacNum = input.nextInt();
depAmArr[] = new int[TransacNum];
你在transSum得到任何值之前定义了defAmArr。
这导致数组具有不同的值(或没有值)。
解决它只是做
新的 int[transSum];
在你得到他对 transSum
的价值之后
该程序要求用户输入一些金额,该金额将存储到一个数组中。 但就我而言,在输入金额时,程序显示错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at bankapplication.DepositWithdraw.deposit(DepositWithdraw.java:17)
at bankapplication.BankApplication.main(BankApplication.java:46)
我的代码
package bankapplication;
import java.util.*;
public class DepositWithdraw {
Scanner input = new Scanner(System.in);
int TransacNum;
double withAm;
int depAmArr[] = new int[TransacNum];
public void deposit() {
System.out.println("Depositing:\nHow many transaction you want to make? ");
TransacNum = input.nextInt();
for (int i = 0; i < TransacNum; i++) {
System.out.println("Enter amount " + (i + 1) + ":");
depAmArr[i] = input.nextInt();
}
System.out.println("You are done! Choose other option if you want to continue.\n");
}
}
[注意:此 class 及其方法将在我的主 class 中调用。我没有在这里展示我的主要class,但如果需要我会编辑post]
因为您永远不会使用从用户输入中获得的大小来初始化它。
class 初始化为所有 class 成员设置了默认值,包括 TransacNum
。 (值:0)
那些数组的大小设置为大小为0的数组。
您应该只在已知大小的情况下创建数组。 即用户输入尺码后
示例:
TransacNum = input.nextInt();
depAmArr[] = new int[TransacNum]
此外,您应该将 int depAmArr[] = new int[TransacNum];
更改为 int depAmArr[];
TransacNum
,默认情况下是 0
,直到你给它赋值。问题是你用它来初始化depAmArr
在那之前。在 TransacNum
之后初始化它,你应该没问题:
TransacNum = input.nextInt();
depAmArr[] = new int[TransacNum];
你在transSum得到任何值之前定义了defAmArr。 这导致数组具有不同的值(或没有值)。 解决它只是做 新的 int[transSum]; 在你得到他对 transSum
的价值之后