2016-03-23 11 views
-1

Rastgele oluşturulmuş bir değer dizisini sıralamaya çalışıyorum ama bu arrays.sort'u yanlış yere sahip olabileceğimi veya doğru sözdizimine sahip olmadığımı düşünüyorum.Rastgele oluşturulmuş 12 değerden oluşan bir diziyi sıralama

Birisi düzgün çalışmasını sağlamak için ne yapmam gerektiğini bana açıklayabilir mi?

İşte kod.

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

örnek girdi sağlamak Lütfen ben 3'te koymak Yani eğer çıkış –

+0

beklenen ben gibi bir şey istemek şüpheli o zaman bana her biri için rastgele bir değerle 12 ay boyunca 1 yıl verirdi, o zaman 2 ve 3 yıl için aynı şeydi. İstediğim şey, rastgele değerlerin en azdan en büyüğüne sıralanmasıdır. – GreyFlyer

cevap

0

Sen döngü için birlikte monthsArray ayar yoğunlaşabilir olabilir. Arrays.sort() yanlış yerde ve monthsArray kullanmıyorsunuz, ancak ayları yazdırırken daha rasgele sayılar üretiyorsunuz. Bu, last question'unuza bakmayı amaçladığınız şeyden daha fazlasını yapmalıdır: her yıl için rastgele yüzer üretin, sıralayın, yazdırın.

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

Yorumunuzu uyacak şekilde Bunu değiştirmek için:

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. Neredeyse bütün gün bu işte çalıştım, belki de yarına kadar beklemem ve aklımı temizlemek için tekrar çalışmaya ihtiyacım var. Ama ne olursa olsun her ay için bu rastgele değerleri üretmek ve çıktıyı asıl defterimde olduğu gibi tutmak (arrays.sort'a eklemeden), ancak daha sonra programda rastgele dizi değerlerini sıralamak istiyorum. medyan, max ve min hesaplamak? – GreyFlyer

+0

O zaman aylar dizisi yerine [[] [] randFloats = yeni int [yıl] [12]; –

+0

2d dizisini değiştirirsiniz. Her yıl için yüzerleri saklayan 2d dizisini uygulayan bir örnek ekledim. –

1

gerçekte monthsArray değişken bir şey saklamak değildir anda. new float[12] ile oluşturursunuz, ancak rastgele sayılarınız yazdırılır ve sonra atılır. senin Java 8 kullanıyorsanız o zaman bu çok daha basit olabilir

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

Not:

double[] monthsArray = Random.doubles(12, 0, 100).sorted().toArray(); 
İlgili konular