我是编程的新手。我正在尝试创建一个反向显示数组的程序。另外还可以找到数组的偶数和奇数,计算总数并显示偶数和奇数。代码可以工作,但问题是它还会反转偶数和奇数数组,并在这些数组中显示这个奇怪的零。我究竟做错了什么? 还请提供说明。谢谢!
import java.util.Arrays;
public class ArrayTest {
public static void main(String[] args)
{
int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
for ( int i=0; i<array.length/2; i++ )
{
int temp = array[i];
array[i] = array[array.length-(1+i)];
array[array.length-(1+i)] = temp;
}
System.out.println("Array after reverse: \n" + Arrays.toString(array));
int even=0;
int odd=0;
int[] Even = new int[13];
int[] Odd = new int[13];
for ( int i=0; i<array.length; i++)
{
if (array[i] % 2 == 0)
{
Even[i] = array[i];
even++;
}
else
{
Odd[i] = array[i];
odd++;
}
}
System.out.println("Even: "+even+" ");
System.out.println(Arrays.toString(Even));
System.out.println("Odd: "+odd+" ");
System.out.println(Arrays.toString(Odd));
}
}
输出结果为:
反转后的数组:
[13,12,11,10,9,8,7,6,5,4,3,2,1]
偶:6
[0,12,0,10,0,0,0,6,0,4,0,2,0]
奇怪:7
[13,0,11,0,9,0,7,0,5,0,3,0,1]
答案 0 :(得分:0)
你需要纠正你的逻辑
int[] Even = new int[(array.length/2)+1];
int[] Odd = new int[(array.length/2)+1];
for ( int i=0; i<array.length; i++)
{
if (array[i] % 2 == 0)
{
Even[even] = array[i];
even++;
}
else
{
Odd[odd] = array[i];
odd++;
}
}
根据您的代码,您正在为奇数和偶数初始化大小为13
的数组,这是不正确的。
int[] Even = new int[13];
int[] Odd = new int[13];
因此,默认情况下,Even
和Odd
数组将由0
值初始化。然后,您将根据主数组设置值,其大小为13
备用(偶数/奇数)。
<强> ==更新==
因为,您不希望Even
和Odd
数组以相反的顺序排列。然后,您可以移动代码。
<强> >>Demo<<
答案 1 :(得分:0)
如果您不想在输出中看到零,请使用print in for statement。另一种解决方案 - 首先计算奇数和偶数,并创建具有精确大小的数组。
this.$nextTick(() => this.$refs.solutionDetails.showCurrent(command))
答案 2 :(得分:0)
你遇到了2个问题(我猜是这样)
奇数和偶数数组的顺序也相反
原因:第一个For循环反转&#39;数组&#39;并将结果存储在数组本身中。所以,下次你尝试使用&#39; array&#39;为了找到奇数/偶数,你实际上正在使用反转数组。
解决方案:您可以将原始阵列分配给备份阵列,并使用该备份阵列查找奇数和偶数。
不必要的零:
原因:在你的第二个for循环中你使用了奇数[i] = array [i],这似乎是你代码中的逻辑错误。考虑一下这个案例:
i的值:0 1 2 3 4 5 ... 12
数组[i]的值:1 2 3 4 5 6 ... 13
odd [i]的值:1 0 3 0 5 0 ... 13
even [i]的值:0 2 0 4 0 6 ... 0
这意味着,for循环中的控件将流向if {} block或else {}块而不是两者。因此,当if(条件)满足时,则甚至[i]数组将被更新。但同时奇数[i]阵列会发生什么?它保留了初始值&#39; 0。那就是它!
我希望以下代码可以帮助您:
import java.util.Arrays;
public class A
{
public static void main(String[] args)
{
int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int[] arr2 = new int[array.length]; // backup array
arr2=Arrays.copyOfRange(array,0,array.length);
for ( int i=0; i<arr2.length/2; i++ )
{
int temp = arr2[i];
arr2[i] = arr2[arr2.length-(1+i)];
arr2[arr2.length-(1+i)] = temp;
}
System.out.println("Array after reverse: \n" + Arrays.toString(arr2));
int even=0;
int odd=0;
int[] Even = new int[13];
int[] Odd = new int[13];
for ( int i=0; i<array.length; i++)
{
if (array[i] % 2 == 0)
{
Even[even] = array[i];
even++;
}
else
{
Odd[odd] = array[i];
odd++;
}
}
Even=Arrays.copyOfRange(Even,0,even);
Odd=Arrays.copyOfRange(Odd,0,odd);
System.out.println("Even: "+even+" ");
System.out.println(Arrays.toString(Even));
System.out.println("Odd: "+odd+" ");
System.out.println(Arrays.toString(Odd));
}
}
注意: 我使用 Arrays.copyOfRange(数组,开始,结束)函数从头开始复制数组的某个部分结束1位置。
<强>输出:
反转后的数组:
[13,12,11,10,9,8,7,6,5,4,3,2,1]
偶:6
[2,4,6,8,10,12]
奇怪:7
[1,3,5,7,9,11,13]
希望这有帮助:)
- 马汉·马达夫