所以按照惯例,我的代码中有一个非常糟糕的逻辑错误,我的编译器没有捕获,因此我的输出没有返回我需要的值,我想知道是否有人可以给我一个轻推正确的方向,如何解决这个讨厌的错误。但是在你们谈到这一点之前,如果我解释一下有什么可能会有所帮助。所以在主要我试图赋值'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]
无论如何,我都非常感谢能帮助我指明正确的方向。
答案 0 :(得分:0)
这,
for(int f : cf)
{
if(array[f]%2==0)
{
访问f
的{{1}}处的值。我想你想检查array
是否均匀。
f
要真正修复代码,我首先要编写一个方法来计算偶数值。像,
for(int f : array)
{
if(f%2==0)
然后你可以使用它来获得你的赔率和平均值
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;
}
答案 1 :(得分:0)
如果没有对数组的实际要求,可能更容易使用增长的集合,如集合或列表。但是使用给定的结构,您正在错误地使用for each循环。
变量f不是索引,而是每个位置的cf值。并且因为cf初始化为长度为20且填充为零,所以它将始终返回0.
尝试使用传统的for循环,即for (int i=0; i<cf.length;i++){ // do work here }
并检查输出。
编译器可能会遇到其他逻辑错误,因为它不是语法或类型问题。
答案 2 :(得分:0)
odds and evens
之前,您必须致电countem()
方法vegeta[VegetaScouterCount]=cf[f];
更改为vegeta[VegetaScouterCount]=array[f];
问题是你的数组cf
只是大小为20,但是默认情况下所有索引都是0
,否则你会告诉它答案 3 :(得分: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);
}