2014-10-18 59 views
0

我想要问用户他们的文件的名称,然后我要扫描该文件,以查看该文件中有多少索引,然后将其放入一个数组,然后从那里进行。如何向用户询问输入文件名,然后使用该文件名?

这里是我的代码:

import java.util.*;   
import java.io.*; 

public class TestScoresAndSummaryStatistics { 
    public static void main(String[] args) throws IOException { 
     int scores; 
     int indices = -1; 
     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Enter the name of the file"); 
     String fileName = keyboard.next(); 

     //I believe something is wrong here, am I incorrectly bring inputFile into new File? 
     File inputFile = new File(fileName); 
     Scanner data = new Scanner(inputFile); 

     while (data.hasNext()) { 
      indices++; 
     } 
     System.out.println("There are: " + indices + "indices."); 
    } 
} 

我相信出事了与= new File(filename);部分:也许是因为我没有报价,但我不能完全肯定。我怎样才能解决这个问题?

+0

你遇到了什么错误? – APerson 2014-10-18 23:32:15

+0

你的错误可能是'keyboard.next()'调用;尝试将其改为'keyboard.nextLine();'。 – Pokechu22 2014-10-18 23:33:07

+1

我不明白C++部分,那是什么? – Lrrr 2014-10-18 23:33:35

回答

0

解决方法:

变化

while (data.hasNext()) { 
    indices++; 
} 

while (data.hasNext()) { 
    indices++; 
    data.next(); 
} 

说明:

你想增加indices的每一行。要做到这一点,你应该去下一行,并检查是否有其他可用的线路。 问:你怎么去下一行? A:data.next();

例如, - file.txt的:

你的方法 - 坏

  • 步骤1

    line a <--- here you are 
    line b 
    line c 
    
  • 步骤2

    line a <--- here you are 
    line b 
    line c 
    

...

data.hasNext()将为真永远因为你会在每一步的第一行=>无限循环

正确的做法:

  • 步骤1

    line a <--- here you are 
    line b 
    line c 
    
  • 步骤2

    line a 
    line b <--- here you are 
    line c 
    
  • 步骤3

    line a 
    line b 
    line c <--- here you are 
    

在这种情况下data.hasNext()将返回true只有3次,那么它将返回false(该文件不具有3号线之后的任何行)

+0

我保留int indices = -1,因为我不想在文件中包含第一个数字,因为这是假设表示文件中有多少个数字。虽然我确实添加了data.next();它的工作,你会介意告诉为什么工作,我只是想了解更多,如果你不介意。 – Overclock 2014-10-18 23:44:36

+0

我建议使用indices = 0,因为我认为你试图计数指数,0也是可数的。好的,我将编辑帖子以添加一些细节。 – 2014-10-18 23:47:46

0

你只检查是否有数据在Scanner但你永远不会消耗它。

java.util.Scanner.hasNext()方法如果此扫描器在其输入中有另一个标记,则返回true。此方法可能会在等待输入进行扫描时阻塞。扫描仪不会超过任何输入。

如果文件中有任何数据,那么下面的代码将永远不会结束,您无需读取数据即可增加计数器。

while (data.hasNext()) { 
     indices++; 
    } 
+0

不知道你得到什么,我将如何“消费”它?我不是已经将它存储到可变数据中吗? – Overclock 2014-10-18 23:37:43

+0

我不知道该如何更简单。你检查是否有数据要读取,而你从来没有读过它。你认为你在哪里存储它? – luk32 2014-10-18 23:38:48

+0

所以你谈论我的while循环需要改变? – Overclock 2014-10-18 23:40:24

相关问题