1

そのため、入力を見て、特定の基準に適合する単語を数えようとしています (または、数えたくない単語を除外します)。エラーは次のコードにあります。

    BufferedReader br;
    BufferedWriter bw;
    String line;
    int identifiers = 0;
    boolean count = false;

    try
    {
        br = new BufferedReader(new FileReader("A1.input"));
        line = br.readLine();

        while(line != null)
        {
            StringTokenizer t = new StringTokenizer(line);
            String word;
            System.out.println(t.countTokens()); //for testing, keeps printing 6
            for(int c = 0; c < t.countTokens(); c++)
            {

                word = t.nextToken();
                count = true;
                if(Character.isDigit(word.charAt(0))) //if word begins with a number
                {
                    count = false; //do not count it
                } 
                if(count == true)
                {
                    for(String s : keywords)
                    {
                        if(s.equals(word)) //if the selected word is a keyword
                        {
                           count = false; //do not count it
                        }
                    }
                }

                System.out.println(word); //testing purposes

            }
            word = t.nextToken();
        }

入力ファイルは次のとおりです。

INT f2(INT x, INT y ) 
  BEGIN 
  z := x*x - y*y;
RETURN z; 
 END 
 INT MAIN f1() 
 BEGIN
INT x;
READ(x, "A41.input");
INT y;
READ(y, "A42.input");
INT z;
z := f2(x,y) + f2(y,x);
WRITE (z, "A4.output"); 
END

上記のコードのコメントで述べたように、最初の println ステートメントは 6 を繰り返し出力します (while ループが際限なく繰り返されていることを示しています)。2 番目の「テスト目的」の println ステートメントは、継続的にINT f2(INT x繰り返し印刷します。

4

2 に答える 2

6

ファイルの次の行を実際に読んでいないようです。このビットを変更します。

try
{
    br = new BufferedReader(new FileReader("A1.input"));
    line = br.readLine();

    while(line != null)
    {

これに:

try
{
    br = new BufferedReader(new FileReader("A1.input"));

    while((line = br.readLine()) != null)
    {
于 2011-01-31T04:26:41.013 に答える
5

を使用するとwhile()、現在の行のみが評価されます。したがって、決して ではありませんnull。に変更しif()ます。

于 2011-01-31T04:26:32.377 に答える