Java 不断得到一个逻辑错误,它将我的数组输出减少到一堆零
所以像往常一样,我的代码中有一个非常糟糕的逻辑错误,编译器没有捕捉到,因此我的输出没有返回我需要的值,我想知道是否有人能给我一个正确的方向来解决这个讨厌的错误。但在你们开始讨论之前,我先解释一下到底发生了什么可能会有所帮助。因此,在主要情况下,我试图分配值'x'一个数字数组,该数组被带入另一个文件中的getAllEvens,但在输出屏幕的某个地方,值更改被否定或根本没有发生,我得到的都是零。 我真的很感激在这方面的任何帮助或建议,但请尽量按照我的代码来进行设置,或者至少不要使用太多的高级方法,因为我正在努力使这与我为学校做的实验室保持一致。现在我们来看看代码 主要代码Java 不断得到一个逻辑错误,它将我的数组输出减少到一堆零,java,javascript,arrays,Java,Javascript,Arrays,所以像往常一样,我的代码中有一个非常糟糕的逻辑错误,编译器没有捕捉到,因此我的输出没有返回我需要的值,我想知道是否有人能给我一个正确的方向来解决这个讨厌的错误。但在你们开始讨论之前,我先解释一下到底发生了什么可能会有所帮助。因此,在主要情况下,我试图分配值'x'一个数字数组,该数组被带入另一个文件中的getAllEvens,但在输出屏幕的某个地方,值更改被否定或根本没有发生,我得到的都是零。 我真的很感激在这方面的任何帮助或建议,但请尽量按照我的代码来进行设置,或者至少不要使用太多的高级方法,因
`int[] x = {2,4,6,8,10,12,14};
int[] x = {2,4,6,8,10,12,14};
int[] y = {1,2,3,4,5,6,7,8,9};
int[] z = {2,10,20,21,23,24,40,55,60,61};
System.out.println("Odds - " + Arrays.toString(OddsAndEvens.getAllOdds(x)));
System.out.println("Evens - " + Arrays.toString(OddsAndEvens.getAllEvens(x)));
另一个文件中的代码
private static int[] cf = new int[20];
public static int countEm(int[] array, boolean odd)
{
cf=array;
return 0;
}
public static int[] getAllEvens(int[] array)
{
int[]vegeta = new int[20];
int VegetaScouterCount = 0;
int[] XboxThreeYearOld = new int[20];
for(int f : cf)
{
if(array[f]%2==0)
{
vegeta[VegetaScouterCount]=cf[f];
VegetaScouterCount++;
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}
return XboxThreeYearOld;
}
请忽略这个时髦的俚语
我得到的输出
Odds - []
Evens - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我想要什么
Odds - []
Evens - [2, 4, 6, 8, 10, 12, 14]
不管怎样,我都很感激能帮我指明正确的方向。这
for(int f : cf)
{
if(array[f]%2==0)
{
访问数组f处的值。我想你想检查f是否为偶数
要真正修复代码,我首先要编写一个方法来计算偶数。像
static int countEvens(int[] arr) {
int count = 0;
for (int i : arr) {
if (i % 2 == 0) {
count++;
}
}
return count;
}
然后你可以用它来获得你的赔率,甚至
static int[] getAllEvens(int[] array) {
int[] out = new int[countEvens(array)];
int pos = 0;
for (int f : array) {
if (f % 2 == 0) {
out[pos++] = f;
}
}
return out;
}
然后
static int[] getAllOdds(int[] array) {
int[] out = new int[array.length - countEvens(array)];
int pos = 0;
for (int f : array) {
if (f % 2 != 0) {
out[pos++] = f;
}
}
return out;
}
如果对数组没有实际需求,那么使用不断增长的集合(如集合或列表)可能会更容易。但是使用给定的结构时,您错误地使用了for-each循环 变量f不是索引,而是每个位置的cf值。因为cf是用长度20初始化的,并且填充了零,所以它总是返回0 尝试使用传统的for循环,即for int i=0;我 在打印赔率和赔率之前,必须调用countem方法 相反,只需更改vegeta[vegetashotercount]=cf[f];到vegeta[vegetashotercount]=数组[f]; 问题是,数组cf的实例大小为20,但在您告诉它其他情况之前,所有索引默认为0
您尚未初始化cf数组,因此Java将自动为其分配默认值,这意味着每个元素的值都为零 另外,您正在使用完全由零组成的cf来检查一个数字是否为偶数,因此它是0%2 另外,您正在将cf的元素分配给vegeta,然后将其复制到XboxThreeYearOld,这是返回值。因此,返回的数组将填充零 要解决您的问题,请使用以下方法:
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 == 0) {
vegeta[VegetaScouterCount] = array[i];
VegetaScouterCount++;
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}
非常感谢,我很感激,如果我删除了所有的时髦俚语,可能会有所帮助,但现在我明白我做错了什么。谢谢:我真的很感激关于这个问题的所有反馈,因为我并不期待得到所有的帮助,但现在我确实看到,我确实把所有的价值观都设置为零,现在我觉得自己是个十足的白痴谢谢你朝着正确的方向轻推
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 == 0) {
vegeta[VegetaScouterCount] = array[i];
VegetaScouterCount++;
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}
XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}