我需要协助我的Java分配介绍

时间:2016-05-28 21:26:19

标签: java arrays while-loop

我已成功编译了这个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;
     }
}

2 个答案:

答案 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)

  

虽然它没有运行

是的。只是执行可能会卡在OddNumbersEvenNumbers方法的无限循环中。 仔细看看这个:

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