gpt4 book ai didi

java - 使用变量声明数组大小会导致越界异常

转载 作者:行者123 更新时间:2023-11-30 06:13:41 25 4
gpt4 key购买 nike

我正在创建一个int数组secretNumber。当我将数组大小声明为数字时,没有越界异常,但是当我使用变量 (numDigits) 声明数组大小时,我在行 'secretNumber[i] = val 的索引 0 处得到越界异常'。这是类(class):

import java.util.Random;
import java.util.Scanner;

public class Engine {
public int numDigits;
public int[] secretNumber = new int[numDigits]; //this is the array
public Random randomNumberGenerator;

public void setNumDigits() {
Scanner setNumDigits = new Scanner(System.in);
System.out.println("Enter the number of digits to use");
String numDigits = setNumDigits.nextLine();
this.numDigits = Integer.parseInt(numDigits);
}

public int getNumDigits() {
return this.numDigits;
}

public void generateNewSecret() {
int val;
for (int i = 0; i < numDigits - 1; i++) {
Random rand = new Random();
val = rand.nextInt(9);
secretNumber[i] = val; //out of bounds exception is here
}
}

public void setSecretNumber(int[] secretNumberCopy) {
secretNumberCopy.equals(this.secretNumber);
}

public int[] getSecretNumber() {
return secretNumber;
}



}

这是执行方法的主要部分,我在设置数组之前运行 numDigits setter:

import java.util.Scanner;

public class Bagels {
public static void main(String[] args) {

Player playerOne = new Player();

playerOne.setName();

System.out.println(playerOne.getName());

Engine engine = new Engine();

engine.setNumDigits();
engine.setSecretNumber(engine.secretNumber);
engine.generateNewSecret();

System.out.println(engine.getSecretNumber());


}
}

如果我设置了 numDigits,为什么索引 0 会超出范围?

最佳答案

虽然我们已经对您遇到异常的原因进行了一些澄清,但仍然存在如何解决该异常以及如何避免将来出现此类情况的问题。

让我们逐步浏览一下您的代码:

Engine engine = new Engine();

新的engine对象被创建,所有类变量都实例化为其默认值。原始 int 的默认值为 0;

在初始化时,您有:

public int numDigits; // 0
public int[] secretNumber = new int[numDigits]; // arrays object of size 0
public Random randomNumberGenerator; // null

如何继续?

问题部分在于对象设计 - 您需要确定约束状态变量的不变量。您需要在 numDigits 初始化期间设置数组的大小:

public int[] secretNumber; // null at the moment of object initialization

public void setNumDigits() {
Scanner setNumDigits = new Scanner(System.in);
System.out.println("Enter the number of digits to use");
numDigits = Integer.parseInt(setNumDigits.nextLine());
secretNumber = new int[numDigits];
}

关于java - 使用变量声明数组大小会导致越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com