2017-03-20 4 views
-1

のために、配列に値を割り当てる:は、だから私は、次の操作を実行する必要がループ

「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だけになります。

+1

'x'が100になるので、最後の反復は' list'の各要素を100に設定します。 – ahoxha

+0

代入を 'list [i] = i; 'を実行し、whileループを削除します。 – Jack

+1

また、加算ループ外の平均を求める。 – Dakoda

答えて

2

のように試してみてください1ライナー:

  • 番号: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();

それが最適解ではないですが、クールに見えますが:)

は心を持っているしたいoptionalsを使用してチェックすることそれが存在するならば。 また、私はIntStreamを作成して繰り返しましたが、これはかなり見栄えませんが、同じストリームを2回再利用することはできませんでした。 同じ方法で作成しない場合は、2番目と3番目の例でIntStream.rangeClosed(1, 100)の代わりにIntStream.of(numbers)を使用できます。

間違った何をしたか、これで

ループWHY:諸悪の根源がある

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ループの2番目の手順では、別のループをforループ全体に作成しています。これで、すべてのフィールド値2に割り当てられます。その他... この方法では、各セルの値に100が含まれます。つまり、whileループの最後のステップです。

ループが1つあれば十分です。

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

幸運を祈る!

+1

多くの有益な回答がありましたが、私はなぜそれが間違っていたのかを簡単に理解できました。 – Alphonse

2

whileループ内にforループがあります。これは、xが100のとき、forループが配列を100で埋めることを意味します。
whileループは必要ありません。あなたはwhileループを必要としない

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

ので、ちょうどこのループ

for(int i = 0; i<100; i++){ 
     list[i] = i+1; 
    } 
でこのループ

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

を置き換え、それはあなたの配列の各インデックスは同じ値が含まれているでしょう、試してみてください

またはそれ以上:

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

whileループ内にネストループがあります。 xの場合(0〜100)、配列内の項目が更新されます。 x = 100の最後の外側ループでは、配列にはすべての値が格納されます。100

1

2つのループがありますが、必要なのは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");  
      } 
     } 

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

EDIT:

はここにあなたの簡略化コードです。

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

0

あなたがこれを行うことができますJavaの8では、この

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

に問題を分離してみましょう。

関連する問題