0

これは、私が確信が持てない私の課題からの質問です。

このクラスには、パブリック メソッド nextWord() が含まれます。新しい行が読み取られたら、String メソッド .split("\s+") を使用して、その行にある単語の配列を作成します。nextWord() メソッドを呼び出すたびに、配列内の次の単語が返されます。配列内のすべての単語が処理されたら、ファイルの次の行を読み取ります。ファイルの終わりに達すると、nextWord() メソッドは値 null を返します。

ファイルを読み取り、個々の文字列を tokenz という配列に格納しました。

tokenz から個々の単語を一度に 1 つずつ返す「nextWord」というメソッドを使用する方法がわかりません。質問の意味がわからないかも?

質問の最後の部分は次のとおりです。

メイン クラスで、(String "A2Q2in.txt" を使用して) MyReader クラスをインスタンス化する processWords() という名前のメソッドを記述します。次に、 nextWord() メソッドを使用して MyReader クラスから単語を 1 つずつ取得し、各単語を新しい行に出力するループを記述します。

これを行う方法を考えましたが、作成するはずの nextWord メソッドから各単語を返す方法がわかりません。String が返された後、メソッドの処理が完了しているため、return ステートメントの後に到達できないため、カウントを増やすことはできません。

何か助けていただければ幸いです。おそらく私はこれを間違った方法で行っていますか?

配列リストなどは使用できません。

これが私のコードです。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class A2Q2
{ 

  public static void main (String [] args)
  {
    processWords();
  }

  public static void processWords()
  {
    MyReader reader = new MyReader("A2Q2.txt");

    String[] words = new String[174];

    words[0] = reader.nextWord();
    System.out.println(words[0]);

  }

}

class MyReader
{
  static String name;
  static BufferedReader fileIn;
  static String inputLine;
  static int tokensLength = 0;
  static String[] tokens;
  static int counter = 0;






  // constructor.
  public MyReader(String name)
  {
    this.name = name;
  }


  public static String[] readFile()
  {

    String[] tokenz = new String[174];
    int tokensLength = 0; 



    try
    {
      fileIn = new BufferedReader (new FileReader(name));
      inputLine = fileIn.readLine();



      while(inputLine !=null)
      {
        tokens = inputLine.split("\\s+");  

        for (int i = 0 ; i < tokens.length; i++)
        {
          int j = i + tokensLength;
          tokenz[j] = tokens[i];   
        }
        tokensLength = tokensLength + tokens.length; 
        inputLine = fileIn.readLine();
      }

      fileIn.close();

    }

    catch (IOException ioe)
    {
      System.out.println(ioe.getMessage());
      ioe.printStackTrace();
    }  

    //FULL ARRAY OF STRINGS IN TOKENZ


    return tokenz;

  }

  public static String nextWord()
  {
    String[] tokenzz = readFile();
    //????
    return tokenzz[0];
  }

}
4

2 に答える 2

0

ここに概念モデルがあります。

の状態を追跡して、MyReader次に返す値を把握します。次の例ではtokenIndex、次に読み取る場所を決定するために使用しています。

class MyReader
{
  String[] tokens;

  int tokenIndex = 0;

  public String nextWord()
  {
    if(tokens == null || tokens.length <= tokenIndex)
    {
        // feel free to replace this line with whatever logic you want to
        // use to fill in a new line.
        tokens = readNextLine();
        tokenIndex = 0;
    }
    String retVal = tokens[tokenIndex];
    tokenIndex++;

    return retval;
  }   
}

これは完全な解決策ではなく (たとえば、ファイルの終わりをチェックしません)、概念のデモンストレーションにすぎないことに注意してください。少し詳しく説明する必要があるかもしれません。

于 2013-10-14T22:10:45.197 に答える
-1

ループを使用して、配列内の各要素を処理し、一度に 1 つずつ出力しますか?

于 2013-10-14T22:10:54.133 に答える