在for循环中为数组赋值

时间:2017-03-20 14:43:40

标签: java

所以我必须做以下事情:

“在Java程序中声明一百个数字,计算它们的平均值,并找出有多少数字高于平均值。”

public class Main {

    public static void main(String[] args) {
        double[] list = new double[100];
        int x = 1;

        while(x<=100){
            for(int i = 0; i<100; i++){
                list[i] = x;
            }
            x++;
        }

         double sum = 0;
         int j = 0;
         double average = 0;
         while(j < list.length){
            sum += list[j]; 

            average = sum / list.length; 
            j++;
         }
         for(int i = 0; i<100; i++){
                if(list[i] > average){
                     System.out.println(list[i] + "is larger than the average");    
                }
            }
    }
}

我可以看到的问题是将所有数字分配到list数组,最多为100。当我因某种原因检查列表数组时,我只有所有键的数字100。

9 个答案:

答案 0 :(得分:3)

您不需要while循环,它会使您的数组的每个索引包含相同的值,因此只需替换此循环

    while(x<=100){
        for(int i = 0; i<100; i++){
            list[i] = x;
        }
        x++;
    }

有了这个循环

    for(int i = 0; i<100; i++){
        list[i] = i+1;
    }

或更好:

    for(int i = 0; i<list.length; i++){
        list[i] = i+1;
    }

答案 1 :(得分:2)

你的while循环中有一个for循环。这意味着当x为100时,for循环将用100填充数组 不需要while循环。试试

  for(int i = 0; i<100; i++)    
    {    
         list[i] = i+1;   
    }

答案 2 :(得分:2)

在Java 8中,您可以使用一个衬垫执行此操作:

  • 数字:final int[] numbers = IntStream.rangeClosed(1, 100).toArray();
  • 平均值:final double average = IntStream.rangeClosed(1, 100).average().getAsDouble();
  • 高于平均水平:final int[] aboveAverageNumbers = IntStream.rangeClosed(1, 100).filter(number -> number > average).toArray();

虽然它不是最佳解决方案,但看起来很酷:)

请记住使用您要检查的选项是否存在。 我也重复自己创建了IntStream,它看起来并不漂亮,但我无法重复使用相同的流两次 - 我也建议您阅读此内容。 如果您不想创建它,就像在第二个和第三个示例中使用IntStream.of(numbers)而不是IntStream.rangeClosed(1, 100)一样。

你错了什么以及为什么

在这个循环中:

double[] list = new double[100];
int x = 1;
while(x<=100){
    for(int i = 0; i<100; i++){
        list[i] = x;
    }
    x++;
}

有一切邪恶的根源。在while循环中,您将从1迭代到100。 你在里面从0到100迭代。 在while循环的第一步中,您将为列表1中的所有值分配。 你看到了吗?

while循环的第二步中,您将为整个列表创建另一个for循环。所以现在你要分配每个字段值2.等等...... 这样,您的列表包含每个单元格的值等于100 - while循环的最后一步。

一个循环就足够了,例如

for(int i=0; i < 100; i++){
    list[i] = i + 1;
}
祝你好运!

答案 3 :(得分:1)

你有两个循环,但你只需要一个。

public static void main(String[] args) {
        double[] list = new double[100];

        for(int i = 0; i<list.length; i++){
            list[i] = i+1;
        }


        double sum = 0;

        for(double d : list){
            sum += d; 
        }

        double average = sum/list.length;

        for(double d : list){
            if(d > average){
                System.out.println(d + " is larger than the average");    
            }
        }

    }

答案 4 :(得分:1)

如果您始终有算术序列,则无需再次遍历数组以查找总和。使用公式,在您的情况下:(n*(n+1))/2。如果它不是算术序列,则在将值分配给数组时再次找到sum

这是您的简化代码:

public static void main(String[] args) {
    double[] list = new double[100];
    for (int i = 0; i < 100; i++) {
        list[i] = (i + 1);
    }
    double sum = (100 * 101) / 2;
    double average = sum / list.length;
    for (int i = 0; i < 100; i++) {
        if (list[i] > average) {
            System.out.println(list[i] + " is larger than the average");
        }
    }
}

编辑:如果您想为数组分配随机数。

public static void main(String[] args) {
    double[] list = new double[100];
    Random rand = new Random();
    double sum = 0;
    for (int i = 0; i < 100; i++) {
        list[i] = rand.nextInt(100);
        sum += list[i];
    }
    double average = sum / list.length;
    for (int i = 0; i < 100; i++) {
        if (list[i] > average) {
            System.out.println(list[i] + " is larger than the average");
        }
    }
}

答案 5 :(得分:1)

你很困惑。让我们将问题与方法分开

public class Main {

    public static int[] getArray(int size) {
        int[] output = new int[size];
        for (int i = 0; i < size; i++) {
            output[i] = i + 1;
        }
        return output;
    }

    public static double avg(int[] input) {
        int sum = 0;
        for (int i = 0; i < input.length; i++) {
            sum += input[i];
        }        
        return sum / input.length; //Do not call this with an empty array
    }

    public static double largerCount(int[] input) {
        int larger = 0;
        double average = avg(input);
        for (int i = 0; i < input.length; i++) {
            if (input[i] > average) {
                larger++;
            }
        }
        return larger;
    }

    public static void main(String[] args) {
        int[] input = getArray(100);
        System.out.println(largerCount(input) + " elements are larger than the average of " + avg(input));
    }
}

这样代码更容易理解,简化了工作。

答案 6 :(得分:0)

while循环中有一个嵌套循环。对于x,(0-100),将更新数组中的项目。在x = 100的最后一个外循环中,数组将具有所有值100

答案 7 :(得分:0)

可以用这种简单的方式完成:

int[] list = new int[100];
int sum = 0;
double average = 0;
 for(int i=0; i<100 ; i++){
     list[i] = i+1;
     sum = sum + list[i];
 }
  average = (double) sum / list.length; // casting to double 
 for(int i=0; i<100 ; i++){
      if(list[i] > average){
         System.out.println(list[i] + " is larger than the average");
      }
 }

链接到输出:https://ideone.com/24VpYO

答案 8 :(得分:0)

试试这个

public class Main {

    public static void main(String[] args) {
        int[] list = new int[100];
        int x = 1;

        while (x <= 100) {
            for (int i = 0; i < 100; i++) {
                list[i] = x;
                x++;
            }
        }

        double sum = 0;
        int j = 0;
        double average = 0;
        while (j < list.length) {
            sum += list[j];
            j++;
        }
        average = sum / list.length;

        System.out.println("Sum:" + sum);
        System.out.println("Avg:" + average);

        for (int i = 0; i < 100; i++) {
            if (list[i] > average) {
                System.out.println(list[i] + "is larger than the average");
            }
        }
    }    
}