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(平均值),程序会正常打印出所有数组值。但是,如果我在值中添加它,则全部返回为零。我该如何解决这个问题?
答案 0 :(得分: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();
答案 1 :(得分:0)
你所写的内容似乎不太可能是你真正想要的。特别是,保留包含text
的数组null
的第0个元素,并在每次设置任何元素时对数组average
进行排序。这确实会给您带来麻烦,因为average
有100个元素,并且在实例化数组时它们都被初始化为0
。如果将任何一个元素设置为非零然后对数组进行排序,则非零元素将移动到最后,在其位置留下零。
很难说出你真正想要的是什么,但一般来说,在对数组进行排序之前,会在数组中填入所有需要的值,并且如果一个数据库保留的空间超过了数组中需要的空间,那么就只能对元素进行排序正在使用中。