我已成功编译了这个java程序(在0到25之间生成100个随机数,将它们放在一个数组中,并根据每个数组是偶数还是奇数将它们分为两个不同的数组),尽管它不运行。我怀疑我在其中一个while循环中犯了一个错误,虽然我不确定。此外,我努力在问题中正确格式化代码,因此选项卡有点关闭,但它仍然是最清晰的。这是.java文本:
public class Assignment8
{
public static void main( String [] args )
{
int storage [] = new int[100];
int j = 0;
while ( storage.length < 100 ) {
int testVariable = 0 + (int) (Math.random() * ((25 - 0) + 1));
storage[j] = testVariable;
j++;
}
int oddArray[] = OddNumbers( storage );
int evenArray[] = EvenNumbers( storage );
int currentNumber = 0;
System.out.println( "The odd numbers are: " + "\n" );
while ( currentNumber <= 99 ) {
System.out.println( oddArray[currentNumber] + "\n" );
currentNumber++;
}
System.out.println( "\n" + "The even numbers are: " + "\n" );
currentNumber = 0;
while ( currentNumber <= 99 ) {
System.out.println( evenArray[currentNumber] + "\n" );
currentNumber++;
}
}
public static int[] OddNumbers( int storage[] )
{
int currentNumber = 0;
int currentValue = storage[currentNumber];
int oddArray[] = new int[100];
while ( currentNumber <= 99 ) {
if ( storage[currentNumber] % 2 != 0 ) {
oddArray[currentNumber] = currentValue;
} else {
continue;
}
currentNumber++;
}
return oddArray;
}
public static int[] EvenNumbers( int storage[] )
{
int currentNumber = 0;
int currentValue = storage[currentNumber];
int evenArray[] = new int[100];
while ( currentNumber <= 99 ) {
if ( storage[currentNumber] % 2 == 0 ) {
evenArray[currentNumber] = currentValue;
} else {
continue;
}
currentNumber++;
}
return evenArray;
}
}
答案 0 :(得分:2)
storage.length
在整个程序的执行过程中不会改变,因为数组已经分配。你首先while
循环是错误的,因为100不小于100,它永远不会执行。相反,您可以使用简单的for
循环:
for (int j = 0; j < storage.length; ++j) {
int testVariable = 0 + (int) (Math.random() * ((25 - 0) + 1));
storage[j] = testVariable;
}
答案 1 :(得分:1)
虽然它没有运行
是的。只是执行可能会卡在OddNumbers
和EvenNumbers
方法的无限循环中。
仔细看看这个:
while ( currentNumber <= 99 ) { if ( storage[currentNumber] % 2 != 0 ) { oddArray[currentNumber] = currentValue; } else { continue; }
问题是当storage[currentNumber]
是偶数时,
程序使用else
语句执行continue
分支,
由于currentNumber
没有改变,所以storage[currentNumber]
也没有改变,它仍然是偶数,else
分支将再次执行,并且一次又一次地永久执行。 EvenNumber
也有同样的问题。
以下是OddNumbers
的解决方法:
public static int[] OddNumbers(int[] storage) {
int[] oddArray = new int[storage.length];
int oddIndex = 0;
for (int num : storage) {
if (num % 2 != 0) {
oddArray[oddIndex++] = num;
}
}
return Arrays.copyOf(oddArray, oddIndex);
}
我在此方法中进行的额外触摸是Arrays.copyOf
调用,
切断数组的多余元素,否则为0。
然后,当您在main
中打印此数组的内容时,请按以下方式编写:
System.out.println("The odd numbers are: " + "\n");
for (int num : oddArray) {
System.out.println(num);
}
按照相同的模式修复EvenNumbers
。
@Mureinik指出,
填充main
的{{1}}中的循环也被破坏了。
你还有其他几个编码问题,
例如,随机数生成特别难看并使用过时的技术。
完整改进的实施:
storage