gpt4 book ai didi

java - 这个程序从哪里获取它的数字,为什么这是由于增加 1 数组大小引起的? ( java )

转载 作者:行者123 更新时间:2023-11-30 04:56:38 26 4
gpt4 key购买 nike

这个程序只是为了消除数组中的重复项。然而,remove 方法中的第二个 for 循环抛出了越界异常。我一直在寻找,但不明白这是怎么回事,所以我想我应该将数组大小增加 1,这样我就可以让它工作,唯一的缺点是在末尾添加了一个额外的 0。

令我惊讶的是,当我将 tracker[] 的大小从 10 增加到 11 时,程序会打印出从 0 到 9 的每个数字,即使我没有输入大部分数字。这些数字从何而来,为什么我会遇到这个问题?

import java.util.*;
class nodupes
{
public static void main(String[] args)
{

int[] dataset = new int[10];


//getting the numbers
for (int i = 0; i <= 9 ; i++)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter a one digit number");
dataset[i] = input.nextInt();
}

int[] answer = (eliminateduplicates(dataset));
System.out.println(Arrays.toString(answer));
}

public static int[] eliminateduplicates(int[] numbers)
{

boolean[] tracker = new boolean[11];
int arraysize = 1;
for(int k = 0; k <= 9; k++)
{

if(tracker[numbers[k]] == false)
{
arraysize++;
tracker[numbers[k]] = true;
}

}
int[] singles = new int[arraysize];

for(int l = 0; l <= arraysize; l++)
{
if(tracker[l] == true)
{
singles[l] = l;

}


}

return singles;
}
}

此部分发生异常

     if(tracker[l] == true)

但仅当跟踪器大小为 10 时。在 11 时,它仅打印 [0,1,2,3,4,5,6,7,8,9]

编辑: arraysize = 1 是调试的保留,最初它是 0

编辑:已修复它,但现在末尾有一个 0,即使数组应该完全填满。

public static int[] eliminateduplicates(int[] numbers)
{

boolean[] tracker = new boolean[10];
int arraysize = 0;

for(int k = 0; k < numbers.length; k++)
{

if(tracker[numbers[k]] == false)
{
arraysize++;
tracker[numbers[k]] = true;
}

}
int[] singles = new int[arraysize];
int counter = 0;

for(int l = 0; l < arraysize; l++)
{
if(tracker[l] == true)
{
singles[counter] = l;
counter++;
}


}

return singles;
}

最佳答案

由于数组从 0 开始,您的数组大小将比唯一数字的数量大 1,因此您的最终循环会执行太多次。换句话说,如果您有 10 个唯一数字并且跟踪器只有项目 0-10,则“l”(字母 l - 尝试使用不同的变量名称)将达到 11,因此出现越界异常。尝试将声明更改为 int 数组大小 = 0;

关于java - 这个程序从哪里获取它的数字,为什么这是由于增加 1 数组大小引起的? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335998/

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