首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Java入门作业需要帮助

我的Java入门作业需要帮助
EN

Stack Overflow用户
提问于 2016-05-29 05:26:19
回答 2查看 69关注 0票数 1

我已经成功地编译了这个java程序(它生成100个介于0和25之间的随机数,将它们放入一个数组中,并根据每个数组是偶数还是奇数将它们排序到两个不同的数组中),尽管它不能运行。我怀疑我在某个while循环中犯了一个错误,尽管我不能确定。此外,我在问题中努力使代码格式正确,因此选项卡有些偏离,但它仍然大部分是可读的。下面是.java文本:

代码语言:javascript
复制
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;
     }
}
EN

回答 2

Stack Overflow用户

发布于 2016-05-29 05:30:54

storage.length在整个程序执行过程中不会改变,因为数组已经被分配了。因此,您的第一个while循环是错误的,因为100不小于100,它将永远不会执行。相反,您可以使用一个简单的for循环:

代码语言:javascript
复制
for (int j  = 0; j < storage.length; ++j) {
    int testVariable = 0 + (int) (Math.random() * ((25 - 0) + 1));
    storage[j] = testVariable;
}
票数 2
EN

Stack Overflow用户

发布于 2016-05-29 05:36:02

,尽管它不运行

是的,确实如此。只是在OddNumbersEvenNumbers方法中,执行可能会陷入无限循环。仔细看看这个:

while ( currentNumber <= 99 ){ if ( storagecurrentNumber %2 != 0){ oddArraycurrentNumber = currentValue;} else { continue;}

问题是,当storage[currentNumber]为偶数时,程序使用continue语句执行else分支,由于currentNumber没有改变,所以storage[currentNumber]也没有改变,所以它仍然是偶数,并且else分支将被一次又一次地永远执行。EvenNumber也有同样的问题。

这是对OddNumbers的修复

代码语言:javascript
复制
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中打印此数组的内容时,如下所示:

代码语言:javascript
复制
System.out.println("The odd numbers are: " + "\n");

for (int num : oddArray) {
    System.out.println(num);
}

遵循相同的模式来修复EvenNumbers

正如@Mureinik指出的那样,main中填充storage的循环也被打破了。您还有其他几个编码问题,例如随机数生成特别丑陋,并且使用过时的技术。

完全改进的实现:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37503881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档