2016-03-23 4 views
-1

ランダムに生成された値の配列をソートしようとしていますが、間違った場所にこのarrays.sortがあるか、正しい構文がないと思います。ランダムに生成された12個の値の配列を並べ替える

誰かが正しく動作するために必要なことを私に説明することができますか?

ここにコードがあります。

package name; 

import java.util.*; 

public class name { 

    public static void main(String[] args) { 

     int years = isValidInput(); 

     Random generator = new Random(); 
     float[] monthsArray = new float[12]; 

     for (int i = 1; i <= years; i++){ 
      System.out.println("\nYear " + i + ": "); 
      for (int months = 1; months <= 12; months++){ 
       System.out.println("Month " + months + ": " + generator.nextFloat() * 100); 
       Arrays.sort(monthsArray); 
      } 
     } 
} 

    public static int isValidInput(){ 

     Scanner keyboard = new Scanner(System.in); 
     System.out.print("Enter the desired number of years: "); 
     int years = keyboard.nextInt(); 

     while (years <= 1 || years >= 80){ 
      System.out.print("Please enter a number that is greater than 1 and less than 80: "); 
      years = keyboard.nextInt(); 
      System.out.println(); 
     } 
     return years; 
     } 

    } 
+0

はサンプル入力してくださいと私は3に入れたのであれば、出力 –

+0

を期待し、私はあなたのような何かをしたい疑いますそれから私には12ヶ月の1年間に1つずつランダムな値を与え、次に2年目と3年目に同じことをします。私が望むのは、ランダムな値を最小から最大まで順にソートすることです。 – GreyFlyer

答えて

0

monthsArrayをforループで縮約することができます。 Arrays.sort()は間違った場所にあり、あなたはmonthsArrayを使用していませんが、月を印刷するときに乱数を生成します。これはあなたの目指しているもののうち、last questionを探しています:毎年ランダムな浮動小数点数を生成し、ソートしてプリントアウトします。

for(int i = 1; i <= years; i++) { 
    for(int i=0; i<monthsArray.length; i++) 
     monthsArray[i] = generator.nextFloat()*100; 
    Arrays.sort(monthsArray); 
    System.out.println("\nYear " + i + ": "); 
    for(int month = 1; month <= 12; month++){ 
     System.out.println("Month " + month + ": " + monthsArray[month]); 
} 

あなたのコメントを合わせてこれを変更するには:

int[][] randFloats = new int[years][12]; 
int[] monthsArray = new int[12]; 
for(int i = 1; i <= years; i++) { 
    for(int i=0; i<monthsArray.length; i++) 
     monthsArray[i] = generator.nextFloat()*100; 
    Arrays.sort(monthsArray); 
    for(int i=0; i<monthsArray.length; i++) 
     randFloats[year-1][i] = monthsArray[i]; 
    System.out.println("\nYear " + i + ": "); 
    for(int month = 1; month <= 12; month++){ 
     System.out.println("Month " + month + ": " + monthsArray[month]); 
} 
+0

Hmmm。私はこれでほぼ一日中してきたので、明日まで待ってから、もう一度心を尽くしてやる必要があります。しかし、もし私が毎月これらのランダムな値を生成し、元のポストのように出力を保持したいのであれば(array.sortを追加せずに)、その後プログラムでランダム配列の値を中央値、最大値、最小値を計算しますか? – GreyFlyer

+0

次に、monthsArray []を2番目の配列 'int [] []に置き換えます。randFloats = new int [年] [12];' –

+0

各年の浮動小数点数を格納する2次元配列を実装する例を追加しました。 –

1

をあなたが実際にあなたのmonthsArray変数には何も保存されていない現時点では。あなたはnew float[12]でそれを構築しますが、乱数は印刷されてから投げ捨てられます。あなたは、Java 8を使用している場合、これはずっと簡単できること

float[] monthsArray = new float[12]; 
for (int i = 0; i < 12; i++) 
    monthsArray[i] = generator.nextFloat() * 100; 
Arrays.sort(monthsArray); 

注:

double[] monthsArray = Random.doubles(12, 0, 100).sorted().toArray(); 
関連する問題