我已经成功地编译了这个java程序(它生成100个介于0和25之间的随机数,将它们放入一个数组中,并根据每个数组是偶数还是奇数将它们排序到两个不同的数组中),尽管它不能运行。我怀疑我在某个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;
}
}发布于 2016-05-29 05:30:54
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;
}发布于 2016-05-29 05:36:02
,尽管它不运行
是的,确实如此。只是在OddNumbers和EvenNumbers方法中,执行可能会陷入无限循环。仔细看看这个:
while ( currentNumber <= 99 ){ if ( storagecurrentNumber %2 != 0){ oddArraycurrentNumber = currentValue;} else { continue;}
问题是,当storage[currentNumber]为偶数时,程序使用continue语句执行else分支,由于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中填充storage的循环也被打破了。您还有其他几个编码问题,例如随机数生成特别丑陋,并且使用过时的技术。
完全改进的实现:
import java.util.Arrays;
import java.util.Random;
public class Assignment8 {
public static void main(String[] args) {
Random random = new Random();
int[] storage = new int[100];
for (int i = 0; i < storage.length; i++) {
storage[i] = random.nextInt(25);
}
System.out.println("The odd numbers are: " + "\n");
int oddArray[] = OddNumbers(storage);
for (int num : oddArray) {
System.out.println(num);
}
System.out.println("\n" + "The even numbers are: " + "\n");
int evenArray[] = EvenNumbers(storage);
for (int num : evenArray) {
System.out.println(num);
}
}
public static int[] OddNumbers(int[] storage) {
int index = 0;
int[] result = new int[storage.length];
for (int num : storage) {
if (num % 2 != 0) {
result[index++] = num;
}
}
return Arrays.copyOf(result, index);
}
public static int[] EvenNumbers(int storage[]) {
int index = 0;
int[] result = new int[storage.length];
for (int num : storage) {
if (num % 2 == 0) {
result[index++] = num;
}
}
return Arrays.copyOf(result, index);
}
}https://stackoverflow.com/questions/37503881
复制相似问题