2016-03-25 55 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。如果将任何一个元素设置为非零,然后对数组进行排序,则非零元素将移至末尾,在其位置留下零。

很难说出你实际上想要的是什么,但一般来说,在排序之前,人们可以用所有期望的值填充数组,并且如果预留的空间多于该数组中需要的空间,那么将只排序正在使用的元素。