2016-03-25 58 views
0
import java.io.*; 
import java.util.*; 
import java.text.*; 

public class aaa { 

    public static void main(String args[]) throws IOException { 

     Scanner sf = new Scanner(new File("C:\\temp_Name\\DataGym.in.txt")); 
     int maxIndx = -1; 
     String text[] = new String[1000]; 
     while (sf.hasNext()) { 
      maxIndx++; 
      text[maxIndx] = sf.nextLine(); 
     } 

     sf.close(); 

     double average[] = new double[100]; 

     for (int j = 0; j <= maxIndx; j++) { 
      Scanner sc = new Scanner(text[j]); 
      int k = 0; 
      while (sc.hasNext()) { 
       average[k] = Double.parseDouble(sc.next()); 
       Arrays.sort(average); //returns 0 
       System.out.println(average[k]); 
       k++; 
      } 
     } 

    } 
} 

沒有Arrays.sort(平均)程序會正常打印出所有數組值。但是,如果我在值中添加它們全部返回爲零。我該如何解決?Java - Arrays.sort返回0

+0

文件裏面有什麼? –

+0

'Arrays.sort'不返回任何值。 – Andrew

+1

和你期望什麼? – Andrew

回答

5

這比它需要的複雜得多,特別是你正在排序數組,每當你設置一個數值的時候。這意味着您在填充陣列時可能會覆蓋先前添加的值。

我建議你在添加完所有元素後對數組進行排序。

你也知道的大小排列應該是

double average[] = new double[maxIndx+1]; 

一個較短的版本可能看起來像

Path path = Paths.get("C:\\temp_Name\\DataGym.in.txt"); 
double[] nums = Files.lines(path) 
        .mapToDouble(Double.parseDouble) 
        .sorted() 
        .toArray(); 
0

這似乎不大可能,你寫什麼是你真正想要的東西。特別是,您保留包含null的數組text的第零個元素,並且每次設置任何元素時都會對數組average進行排序。這確實會導致你的麻煩,因爲average有100個元素,並且在數組被實例化時它們都被初始化爲0。如果將任何一個元素設置爲非零,然後對數組進行排序,則非零元素將移至末尾,在其位置留下零。

很難說出你實際上想要的是什麼,但一般來說,在排序之前,人們可以用所有期望的值填充數組,並且如果預留的空間多於該數組中需要的空間,那麼將只排序正在使用的元素。