这个项目应该有3个独立的主要类。 它输入按字母顺序排序的国家/地区列表的文件,它输出一个未排序的文件,其中的行随机重新排列。
我的第一个主要课程如下:
package assignment3;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
public class Assignment3 {`
public static void main(String[] args) throws Exception{
Scanner stdIn = new Scanner(new File("C:/Users/Vicki/Desktop/CountrySortedFormat.txt"));
PrintWriter out = new PrintWriter("C:/Users/Vicki/Desktop/CountryUnsortedFormat.txt");
String[] line = new String[238];
while (stdIn.hasNextLine()){
for (int k = 0; k <= line.length-1; k++){
line[k]=stdIn.nextLine();
out.println(line[k]);
out.close();
}
}
}
}
我的代码没有任何明显的问题,但我尝试打印出数组并得到一个&#34; null&#34;的数组。我做错了吗?
编辑:将PrintWriter文件名更改为CountryUnsortedFormat
答案 0 :(得分:1)
那一行:
PrintWriter out = new PrintWriter("C:/Users/Vicki/Desktop/CountrySortedFormat.txt");
重新创建文件。在此行之后,您的输入文件将为空。
答案 1 :(得分:0)
除了@Jens所说的你也有这个问题:
您的代码存在多个问题。首先,你有这一行:
while (stdIn.hasNextLine())
为什么会有这条线?
for (int k = 0; k <= line.length-1; k++)
你已经有了一个循环,你不需要第二个循环。
你也关闭每个循环的输出!那是什么?
out.close();
你只需要在功能结束时关闭它!
你的循环应该是这样的:
int k = 0;
while (stdIn.hasNextLine()) {
// for (int k = 0; k <= line.length - 1; k++) {
line[k] = stdIn.nextLine();
out.println(line[k]);
k++;
// }
}
out.close();
在这样的事情之后你的输出被排序,你没有做任何让输出未排序的东西。
答案 2 :(得分:0)
while (stdIn.hasNextLine()) {
// for (int k = 0; k <= line.length - 1; k++) {
String str = stdIn.nextLine();
out.println(str);
// out.close(); --> here you are closing the out put writer so after first line it will be closed.
// }
}
关闭循环外的扫描仪和打印机。否则在第一行之后,作家将被关闭,只会打印第一行。
答案 3 :(得分:0)
正如@Ali所指出的,代码中存在多个缺陷。也没有用于取消输入的逻辑。
使用ArrayList而不是普通数组,您的取消将变得更容易。 这是一个可能符合您目的的示例代码。
import java.io.PrintWriter;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;
public class Assignment3 {
public static void main(String[] args) throws Exception{
Scanner stdIn = new Scanner(new File("sortedInput.txt"));
PrintWriter out = new PrintWriter("unsortedOutput.txt");
ArrayList<String> line = new ArrayList<String>();
System.out.println(stdIn.hasNextLine());
while (stdIn.hasNextLine()){
line.add(stdIn.nextLine());
}
//here is your unsorting
Collections.shuffle(line);
for(int i=0; i < line.size() ; i++)
out.println(line.get(i));
//Close printwriter once you are done writing everything
out.close();
}
}