赔率& Evens数组实例化

时间:2017-01-12 11:30:45

标签: java arrays

我们正在课堂上学习数组,我被分配了这个编程项目。到目前为止,我已经编写了下面的代码,但我对如何使其正常工作感到困惑。我应该为我的代码使用带有System.out.println语句的for循环。

实例化一个数组并使用值加载它。写方法确定了多少 数组中的值是奇数,有多少是偶数。这些方法应该返回包含的数组 赔率和赔率

Sample Data :
 2 4 6 8 10 12 14
 1 2 3 4 5 6 7 8 9
 2 10 20 21 23 24 40 55 60 61

Sample Output :
 Odds - []
 Evens - [2, 4, 6, 8, 10, 12, 14]
 Odds - [1, 3, 5, 7, 9]
 Evens - [2, 4, 6, 8]
 Odds - [21, 23, 55, 61]
 Evens - [2, 10, 20, 24, 40, 60]

这是我的代码:

public class OddEvensHW {

public static void main(String[] args){

    int x = 0;
    int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

    System.out.println("Even : ");
    for ( x = 0; x  < numbers.length; x++); 
    {  
        if( numbers[x]%2 == 0){
            int even = numbers[x];
            System.out.print ( even + "\t");
        }
        else {
        }

        System.out.println(numbers[x] + " ");

    }

    // odds now
    System.out.println("Odds : ");
    for ( x = 0; x  < numbers.length; x++); 
    {  
        if( numbers[x]%2 != 0){
            int odd = numbers[x];
            System.out.print ( odd + "\t");
        }
        else {
        }         
    }
     System.out.println(numbers[x] + " ");
}

5 个答案:

答案 0 :(得分:2)

for(x = 0; x&lt; numbers.length; x ++);是错误的,你必须删除&#34 ;;&#34;

答案 1 :(得分:1)

  

方法应该返回包含赔率和平均值的数组

你什么也没有回来。

1)您应该返回数组中包含的两个数组(奇数数组和偶数数组)。 问题是你以前无法知道每个数组的大小,并且数组不能动态扩展。
您可以使用初始数组的大小初始化两个数组。其余元素将为null。 另一个解决方案是第一次迭代计算奇数和偶数元素,并使用此信息实例化数组,然后再次在初始数组上迭代以填充两个数组。

2)你不需要在初始数组上迭代两次:一次处理奇数值,另一次处理偶数值。
你应该在一个循环中处理这两种情况(奇数和偶数)。

答案 2 :(得分:1)

你要

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20

这是因为你在几个for循环中,循环运行到x < numbers.length

numbers.length gives you the total number of entries in array. So in this case its 20, but the last index is 19 (it starts from 0 and ends at 19). Index 20 doesn't exist at all. Thus the `ArrayIndexOutOfBoundsException`

要解决此问题,请在偶数和奇数情况下将for简单更改为for (x = 0; x < numbers.length - 1; x++)

因此您的代码如下:

public class OddEvensHW {
public static void main(String[] args) {

    int x = 0;
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

    System.out.println("Even : ");
    for (x = 0; x < numbers.length - 1; x++)

    {
        if (numbers[x] % 2 == 0) {
            int even = numbers[x];
            System.out.print(even + "\t");
        }

    }

    // odds now
    System.out.println("Odds : ");
    for (x = 0; x < numbers.length - 1; x++)

    {
        if (numbers[x] % 2 != 0) {
            int odd = numbers[x];
            System.out.print(odd + "\t");
        }
    }

}

}

希望它有所帮助!

答案 3 :(得分:1)

你的问题在于:for ( x = 0; x < numbers.length; x++);最后的分号终止了语句,因此除了递增x之外,循环基本上什么都不做。在该循环结束后,x的值为numbers.length(在这种情况下为20),因此当您到达if (numbers[x] % 2 == 0) {时,您将获得ArrayIndexOutOfBoundsException,因为numbers[20]位于界限之外。要解决此问题,只需从每个;循环中删除for

对于您的任务,您应该编写方法返回包含所有奇数和偶数的数组。所以基本上你需要有两种方法,一种用于赔率,一种用于平均值。

首先,他们应该看起来像这样:

public static int[] odds(int[] input) {
    int count = 0;
    //insert logic to count the odds in the input
    int[] odds = new int[count];

    // insert logic to fill the "odds" array with the odd values from "input"
    return odds;
}
public static int[] evens(int[] input) {
    // analogous
}

这应该为你提供继续的基础。

答案 4 :(得分:1)

这里你可以做什么,因为你的循环错了,它实际上并没有运行。当它发生时你可以在一个循环而不是2个时刻收集数据,因为任何一个数字都是奇数/偶数,而不是其他可能性。因此,if-else将完成工作

 int x = 0;
    int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

    String even="";
    String odd="";

    for(;x<numbers.length;x++){
        if( numbers[x]%2 == 0){
            even += numbers[x] + ", ";
        }
        else {
            odd += numbers[x] + ", ";
        }
    }

    System.out.println("Even ="+even);
    System.out.println("odd ="+odd);