创建在java中存储-6到38的赔率的数组

时间:2017-08-17 17:32:33

标签: java

我正在学习Java,我在阵列章节中找到了一个我无法解决的练习。

练习说:

  

编写创建名为odds的数组的代码,并使用for循环将所有奇数在-6和38之间存储到其中。使数组的大小足以存储数字。

我能想出的唯一解决方案是:

import java.util.Arrays;

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

        oddsArray();
    }
    public static void oddsArray(){
        int odds = 0;
        for (int i = -6; i <= 38; i++){
            if (i % 2 == 1){
                odds++;
            }
        }
        int[] numbers = new int[odds];
        for (int i = 0; i < numbers.length; i ++){
                for (int j = -6; j <= 38; j++){
                    if(j % 2 == 1){
                        numbers[i] = j;
                    }
            }
        }
        System.out.println(Arrays.toString(numbers));
    }
}

然而,该程序打印:

[37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37]

我不明白为什么。

10 个答案:

答案 0 :(得分:6)

这里不需要嵌套的FOR循环。只需创建一个整数变量i来跟踪数组中的位置,并在添加每个新项目时增加它。 PS ...数组应该根据赋值的规格被称为“赔率”。我建议重命名你用来计算其他东西的赔率数量的变量(例如numberOfOdds)

<div>My name: <input name="fullName" type="text"></div>
<div>My email: <input name="email" type="email"></div>
<div data-label="Friend's name"><input name="friendFn" type="text"></div>
<div data-label="Friend's email"><input name="friendEm" type="email"></div>

答案 1 :(得分:2)

对于每个i,您可以查看所有奇数j,并将其分配给numbers[i]。相反,你可以(应该!)使用单个循环:

int min = -6;
int max = 38;
int numOdds = (max - min) / 2; // Ok because both min and max are even

int[] odds = new int[numOdds];
int firstOdd = min;
if (min % 2 == 0) {
    ++firstOdd;
}
int index = 0;
for (int i = firstOdd; i < max; i += 2) {
    odds[index++] = i;
}
BTW - 我认为这是一个学校练习,并且您应该使用for循环,但坦率地说,Java 8的流可以更简洁的方式解决这个问题:

odds = IntStream.range(-6, 38).filter(i -> i % 2 != 0).toArray();

答案 2 :(得分:0)

赔率是单个值,您需要保留列表中找到的所有奇数。

int odds = 0;

答案 3 :(得分:0)

U创建了int值并在第一个for循环中将其更改了22次。然后你为你的阵列添加相同的值再过百万次。尝试在第一个循环中将值添加到数组中:

int[] odds= new int[numberOfOdds];
int i = 0;

for (int j = -6; j <= 38; j++)
{
  if(j % 2 == 1)
  {
      odds[i++] = j;
   }
}

如果您不知道集合的长度,请更好地使用列表。

答案 4 :(得分:0)

当你只需要一个for循环时,你有两个for循环。 展开循环,您的程序正在执行以下操作:

numbers[0] = -6; 
numbers[0] = -4;
numbers[0] = -2;
etc...
numbers[0] = 37;
numbers[1] = -6;
numbers[1] = -4;
etc...

答案 5 :(得分:0)

请尝试下面的

public static ArrayList<Integer> getOddList(int min,int max){
       ArrayList<Integer> myList = new ArrayList<>();
       for( int i = min ; i <= max ; i++){
           if(i % 2 != 0){
               myList.add(i);
           }
       }
       return myList;
   }

[-5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37]

我在这里假设min和max u r提供的是有序的。我还没有测试我的功能。但这是你可以采取的实用程序。请让我知道

答案 6 :(得分:0)

您可以在不事先知道奇数的情况下执行此操作。

int[] oddNumbers = IntStream.range(-6, 38)
            .filter(i -> i % 2 != 0)
            .toArray();

答案 7 :(得分:0)

谢谢你们的回答。我把方法改为:

public static void oddsArray(){
        int numberOfOdds = 0;
        for (int i = -6; i <= 38; i++){
            if (i % 2 == 1){
                numberOfOdds++;
            }
        }
        int[] odds = new int[numberOfOdds];
        int i = 0;
        for (int j = -6; j < 39; j++){
            if (j % 2 == 1){
                odds[i++] = j;
            }
        }
    }

现在它只打印正奇数。

答案 8 :(得分:0)

我不确定是否有必要,但每次遇到一个新的奇数时,你可以重新创建一个包含奇数的数组。无论您使用何种范围,以下方法都可以使用。我知道你可以使用一个ArrayList,但问题似乎是想要一个数组。

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

    private int[] odds;
    private int start = -6;
    private int end = 38;

    odds = findOdds(start, end);

    if (odds== null)
        System.out.println("There weren't any odds");
    else
        System.out.println(Arrays.toString(odds));
}

public static int[] findOdds(int start, int end) {
    private int[] arrayOfOdds;
    private int[] tempArray;

    private int numberOfOdds = 0;

    if (start < end)
    {
        while (start != end)
        {
            if ((start % 2) == 1)
            {
                if (arrayOfOdds != null)
                {
                    tempArray = new int[arrayOfOdds.length + 1];

                    for (int i = 0; i < arrayOfOdds.length; i++)
                        tempArray[i] = arrayOfOdds[i];

                    tempArray[arrayOfOdds.length] = start;
                    arrayOfOdds = tempArray;
                } else {
                    arrayOfOdds = new int[1];
                    arrayOfOdds[0] = start;
                }
            }

            start++;
        }
    }

    return arrayOfOdds;
}

} 

答案 9 :(得分:0)

我有答案,这有效

int[] odds = new int[22];
for(int i = 0;i<odds.length;i++){
odds[i]=2*i-5;
}