-1

私のプログラムでは、datafile.txt というファイルを読み取ります... datafile.txt の中には、ランダムな 3 行の単語があります。私のプログラムは、ユーザーが入力したファイルを読み取り、行番号と単語番号を入力して、その場所にある単語を教えてくれます..たとえば..

読み取るファイルは何ですか?

データファイル.txt

行番号と単語番号(1行目は1)を入力してください。

2 2

言葉は:

私の問題は、プログラムが txt doc の 3 行を 0, 1 ,2 として読み取り、単語が 0 から始まることです。したがって、最初の行の最初の単語を読み取るには、1,1 ではなく 0,0 と入力する必要があります。 . 私がやろうとしているのは、0,0 の代わりに 1,1 を入力できるようにすることです。私の問題が今何なのかわからない、ここに私のコードがあります....

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

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class readingFile {

    /**
    * @param args
    * @throws IOException 
    * @throws validException 
    */
    public static void main(String[] args) throws IOException, checkException 
    {
        System.out.println("Enter file name: " );
        Scanner keyboard = new Scanner(System.in);
        BufferedReader inputStream = null;
        ArrayList<String> file = new ArrayList<String>();
        String fileName = keyboard.next();
        System.out.println ("The file " + fileName +
                " has the following lines below: ");
        System.out.println();

        try
        {
            inputStream = new BufferedReader(new FileReader(fileName));         
            ArrayList<String> lines = new ArrayList<String>();
            while(true)
            {
                String line = inputStream.readLine();
                if(line ==null)
                {
                    break;
                }

                Scanner itemnize = new Scanner(line);
                while(itemnize.hasNext())
                {
                    lines.add(itemnize.next());
                }
                lines.addAll(lines);

                System.out.println(lines+"\n");                 
            }       

            System.out.println("Please enter the line number and word number");

            int index1 = keyboard.nextInt();
            int index = keyboard.nextInt();

            System.out.println("The word is: "+ lines.get(index));
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Error opening the file " + fileName);
        }
        inputStream.close();
    }

    private static void checkValid(ArrayList<String> items, int index) throws checkException
    {
        throw new checkException("Not Found");
    }       
} 
4

2 に答える 2

1

1 ベースのユーザー入力を 0 ベースの内部表現に適応させる明確な解決策は、ある時点で 1 を減算することです。を使っていないのを見てindex1

lines.get(index - 1)

あなたの問題を完全に解決するつもりはありません。しかし、そこから取得して、単語インデックスに対して同様のことを行うことができると思います。

于 2012-09-08T22:19:55.017 に答える
0

あなたはプログラミングを学んでいるだけだと思う​​ので、3つの改善点を指摘します。

  • 式の評価の順序を決定する BIDMAS が数学にあるのと同じように、Java や他のプログラム言語はステートメントを粒状に評価します。これは、関数の括弧内に、変数または定数の代わりにステートメントを含めることができることを意味します。これは、呼び出された関数に渡された結果 (または戻り値) で評価されます。これがMvGがあなたができると言う理由ですlines.get(index - 1)

  • 考慮して計画する必要があるすべての例外について、コンパイラが通知するわけではありません。たとえば、コードで行番号または単語番号に無効な入力が入力された場合、実行時例外 (配列インデックスが範囲外) が発生します。

  • index変数の命名は便利なはずですindex1。違いは何ですか?あなたのコードを読むと、1つはユーザーが選択した行番号のインデックスであり、2つ目はその行の単語のインデックスであるはずです。と をお勧めrequestedLineIndexrequestedWordIndexます。

最後に、これは通常の StackOverflow の質問ではないため、質問が「反対票を投じられた」理由です。コースの一部として学習している場合、質問を投稿できるコース フォーラムまたは仮想学習環境 (VLE) はありますか? 同じ学習レベルの仲間のサポートは、言語の基礎を探求するのに役立ちます。

于 2012-09-08T22:51:19.413 に答える