【问题标题】:I need assistance with my intro to Java assignment我的 Java 作业介绍需要帮助
【发布时间】:2016-09-26 23:56:41
【问题描述】:

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

【问题讨论】:

  • 开始的地方是在您的 IDE 调试器中一次单步执行代码。你已经这样做了吗?如果是这样,请告诉我们您发现哪些不明白的地方。
  • 请包含示例输出或错误。
  • 这是题外话,但为什么写25 - 0而不是25
  • 我建议您使用 IDE 来 a) 格式化您的代码,b) 帮助您调试它。顺便说一句,您可以用大约 5 行代码编写此代码。

标签: java arrays while-loop


【解决方案1】:

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;
}

【讨论】:

    【解决方案2】:

    虽然没有运行

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

    while ( currentNumber <= 99 ) {
        if ( storage[currentNumber] % 2 != 0 ) {
            oddArray[currentNumber] = 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 指出的那样, 填充storagemain 中的循环也被破坏了。 你还有其他几个编码问题, 例如,随机数生成特别难看,并且使用了过时的技术。

    完整改进的实现:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2013-12-12
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多