0

我是java新手,想请教一下。我有一些数据存储在一个 txt 文件中,每行包含三个整数,以空格分隔。如果满足某些条件(在我的情况下 - 第三个 int 大于 50),我想从文件中读取数据,然后将这些数据放入数组中以进行进一步处理。我读了一些关于如何读取文件中的行数或文件本身的问题,但我似乎无法将它们结合在一起以使其工作。最新版本的代码如下所示:

public class readfile {

private Scanner x;

    public void openFile(){
        try{
            x = new Scanner(new File("file.txt"));
        }
        catch (Exception e){
            System.out.println("could not find file");
        }
    }

    public void readFile() throws IOException{

            LineNumberReader lnr = new LineNumberReader(new FileReader(new File("file.txt")));
            int i = lnr.getLineNumber();
            int[] table1 = new int[i];
            int[] table2 = new int[i];
            while(x.hasNextInt()){
            int a = x.nextInt();
            int b = x.nextInt();
            int c = x.nextInt();
            for (int j=0; j< table1.length; j++) 
            {
                if(c > 50)
                {
                table1[j]=a;
                table2[j]=b;  
                }

            }
            }System.out.printf(" %d %d", table1, table2);


    }         
    public void closeFile(){
        x.close();
    }
}

main 位于另一个文件中。

public static void main(String[] args) {

    readfile r = new readfile();
    r.openFile();
    try {
    r.readFile();
    }
    catch (Exception IOException) {}   //had to use this block or it wouldn't compile
    r.closeFile();
}

当我在 printf 方法上使用 %d 时,我什么也看不到,当我使用 %s 时,我会在输出中得到一些乱码,例如

[I@1c3cb1e1 [I@54c23942

我应该怎么做才能使它工作(即当c> 50时打印成对的ab)?

提前感谢您的帮助,如果这是一个明显的问题,我很抱歉,但我真的没有关于如何改进它的想法:)

4

4 回答 4

0

您正在得到乱码输出,因为您正在打印数组引用printf()

对于单个值,请使用循环,例如..

for(int i:table1){
System.out.print(""+i)
}

或者

要成对打印,请替换以下代码...

       if(c > 50)
         {
            table1[j]=a;
            table2[j]=b;  
            System.out.printf("%d %d",a,b);
         }
于 2013-07-10T20:11:26.273 回答
0

您不能使用 printf 将数组格式化为 int。如果要打印数组的全部内容,请使用辅助函数Arrays.toString(array)

例如

System.out.println(Arrays.toString(table1));
于 2013-07-10T20:17:01.340 回答
0

您不能使用 打印整个数组%d。循环遍历数组并分别打印每个值。

于 2013-07-10T20:10:10.793 回答
0

如果我让你正确,你有一个像

12 33 54
93 223 96
74 743 4837
234 324 12

如果第三个整数大于 50 你想存储前两个?

List<String> input = FileUtils.readLines(new File("file.txt"), Charset.forName( "UTF-8" ));
HashMap<Integer, Integer> filtered = new HashMap<Integer, Integer>();

for (String current : input) {
    String[] split = current.split(" ");
    if (Integer.parseInt(split[2]) > 50) 
        filtered.put(Integer.parseInt(split[0]), Integer.parseInt(split[1]))
}
System.out.println(filtered);
于 2013-07-10T20:36:39.343 回答