输入已排序的文件,对其进行排序,然后输出未排序的文件(Java)

时间:2014-11-25 06:34:34

标签: java arrays file printwriter sorted

这个项目应该有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

4 个答案:

答案 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();
    }
}