有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么扫描仪输入在这种特定情况下显示错误?

程序要求用户输入一些金额,这些金额将存储到一个数组中。 但在我的情况下,在输入金额时,程序显示错误:

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");
    }

}

[注意:这个类及其方法是在我的主类中调用的。我没有在这里显示我的主类,但是如果需要,我会编辑帖子]


共 (3) 个答案

  1. # 1 楼答案

    你在transSum获得任何许可之前就定义了德法玛尔。 这导致数组具有不同的值(或没有值)。 要解决这个问题,只需按 新整数[transSum]; 在您获得transSum的值之后

  2. # 2 楼答案

    TransacNum,默认情况下为0,直到为其赋值。问题是,在此之前,您使用它初始化depAmArr。只需在TransacNum之后初始化它,就可以了:

    TransacNum = input.nextInt();
    depAmArr[] = new int[TransacNum];
    
  3. # 3 楼答案

    因为您从未使用从用户输入获得的大小初始化它
    类初始化已将默认值置于所有类成员上,TransacNum包括在内。(值:0)
    数组大小设置为0的数组

    您应该仅在已知大小时创建数组即用户输入尺寸后

    例如:

    TransacNum = input.nextInt();
    depAmArr[] = new int[TransacNum]
    

    另外,您应该将int depAmArr[] = new int[TransacNum];更改为int depAmArr[];