package test;
/* Read numbers from a text file and store them into an array; then
sort the array and display it on the screen. Save the sorted array
in sorted.txt. */
import java.util.Scanner;
import java.io.*;
public class Test {
static public void main(String[] args) throws IOException {
/* Initialize the input stream reading from a text file */
Scanner inputFile;
inputFile = new Scanner(new File("arrayex1.txt"));
/* Initialize the output stream writing into a text file */
PrintWriter outputFile;
outputFile = new PrintWriter(new FileWriter("sorted.txt"));
/* Declare the array */
int[] numbers = new int[50];
int index = 0;
int temp, smallest, smallest_index;
/* Read the first number */
numbers[index] = inputFile.nextInt();
while (numbers[index] != 0) {
index++;
numbers[index] = inputFile.nextInt();
}
/* Sort the array using the selection sort method; the inner
loop finds the smallest unsorted number, and the outer
loop places it in the right place. */
for (int i = 0; i < index - 1; i++) {
smallest = numbers[i];
smallest_index = i;
for (int j = i + 1; j < index; j++) {
if (numbers[j] < smallest) {
smallest = numbers[j];
smallest_index = j;
}
}
/* If needed switch numbers[i] and numbers[smallest_index] */
if (numbers[i] != numbers[smallest_index]) {
temp = numbers[i];
numbers[i] = numbers[smallest_index];
numbers[smallest_index] = temp;
}
}
/* Display the sorted array and also save the result in sorted.txt*/
for (int i = 0; i < index; i++) {
System.out.print (numbers[i] + " ");
outputFile.print (numbers[i] + " ");
}
inputFile.close();
outputFile.close();
}
}
这是错误获取:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at test.Test.main(Test.java:37)
请提供任何帮助和解决方案。提前谢谢。
答案 0 :(得分:1)
始终通过调用Scanner.hasNext()
检查扫描仪是否有下一个元素,而不是跳转到Scanner.Next()
。
显示错误是因为扫描仪到达了最后一个元素,并且没有其他人再次显示。
答案 1 :(得分:0)
首先,由于我猜测每次都不会有相同数量的数字排序,因此,我建议使用整数的ArrayList。
这是读入方法,隐含了导入:
private static ArrayList<Integer> nums;
public static void readIn() throws FileNotFoundException{
Scanner sc = new Scanner(new File("file.txt"));
boolean error = false;
while(sc.hasNext()&&!error){
try{
nums.add(Integer.parseInt(sc.next()));
}catch(NumberFormatException e){
e.printStackTrace();
error = true;
}
}
}
这是最有效排序的代码。
int[] numbers = (int[]) nums.toArray();
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));