-1

私は学校のプロジェクトに取り組んでいますが、ここで問題が発生しています。雑学ゲームのファイルを調べます。ファイルの形式は次のとおりです。ファイルの最初の行は質問のカテゴリになり、次の行は質問と回答のペアになります。空白行に到達するまで、空白行の次の行が新しいカテゴリを開始し、それが続くことを示します。6 つのインデックスを持つ ArrayList を作成することになっています。カテゴリごとに 1 つ、各インデックスには、比較に使用できる質問と回答のグループが必要です。基本的に、配列リスト内の配列だと思います。私が達成しようとしていることが理にかなっていることを願っています。それは私にとって非常に紛らわしいです。しかし、これは私が取り組もうとしているコードであり、非常に多くの部分が非常に混乱しています。

import java.util.ArrayList;


public class TriviaQuestion {

private String player;
private String category;
private String question;
private String answer;
private int score = 0;

/**
 * 
 */


public TriviaQuestion() {
    player = "unknown";
    category = "unknown";
    question = "unknown";
    answer = "unknown";
    score = 0;
}

public TriviaQuestion(String category, String question, String answer){

}

public TriviaQuestion(String question, String answer){

}
public TriviaQuestion(String player, String category, String question,
        String answer, int score) {
    super();
    this.player = player;
    this.category = category;
    this.question = question;
    this.answer = answer;
    this.score = score;
}




/**
 * @return the player
 */
public String getPlayer() {
    return player;
}


/**
 * @param player the player to set
 */
public void setPlayer(String player) {
    this.player = player;
}


/**
 * @return the category
 */
public String getCategory() {
    return category;
}


/**
 * @param category the category to set
 */
public void setCategory(String category) {
    this.category = category;
}


/**
 * @return the question
 */
public String getQuestion() {
    return question;
}


/**
 * @param question the question to set
 */
public void setQuestion(String question) {
    this.question = question;
}


/**
 * @return the answer
 */
public String getAnswer() {
    return answer;
}


/**
 * @param answer the answer to set
 */
public void setAnswer(String answer) {
    this.answer = answer;
}


/**
 * @return the score
 */
public int getScore() {
    return score;
}


/**
 * @param score the score to set
 */
public void setScore(int score) {
    this.score = score;
}

/* (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
    return "TriviaQuestion [category=" + category + ", question="
            + question + ", answer=" + answer + "]";
}







}

それからテスター、クラスの一番下でそれについてメモを取ろうとしましたが、この時点ではあまり意味がありません.

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


public class TriviaQuestion2 {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
     File gameFile = new File("trivia.txt");

        Scanner inFile = new Scanner(gameFile);

        ArrayList<TriviaQuestion> question = new ArrayList<TriviaQuestion>    ();

        while (inFile.hasNextLine()){
            boolean cat = inFile.hasNextLine();
            boolean more = true;
            while (inFile.hasNextLine() && more);
            String answer;
            TriviaQuestion temp = new TriviaQuestion(question, answer); 
            question[0] = new ArrayList<TriviaQuestion>();
            new TriviaQuestion(q,a);
            question[0].add(temp);


        }

}


}
        inFile.close();

    //use a while loop inside a while loop, and first do category, then question/answer
        //there are six categories, use array of trivia questions ArrayList <triviaquestions>[]     
        //question = new ArrayList<triviaQuesitons>[6]
        //question[0] = new ArrayList<triviaQuesitons>(); 
        /**
         * while in question[0] and so on read the quesiton and answer
         * temp = new tq(question, answer)
         * question [0].add(temp)
         * question[0].get(i)
         * 
         */



        System.out.println(question);

    }

    // TODO Auto-generated method stub

}
4

1 に答える 1

1

ファイルを読み取るために、いくつかのネストされたループが必要です。

これは、ファイル形式を説明するのに不適切な方法です。「セクション」は、ファイルのセクションを記述します。各セクションはカテゴリを定義していると言えます。最初の行はカテゴリの名前で、後続の行は質問と回答のペアであり、空白行または EOF で終了します。

疑似コードでは、基本的に次のことが必要です。

List<Category> categories = new ArrayList();
while (in.hasNextLine()) {
    String catName = in.readLine();
    if (catName.trim().length() == 0)
        continue;   // skip extra blank lines between Sections.
    Category cat = new Category( catName);
    categories.add( cat);

    while (in.hasNextLine()) {
        String line = in.readLine();
        if (line.trim().length() == 0)
            break;   // end of Section.

        // parse a Question & it's Answer.
        TriviaQuestion question = parseQuestion( line);
        cat.addQuestion( question);
    }
}

// done.
return categories;

6 つのインデックスを持つ ArrayList を作成することになっています。カテゴリごとに 1 つ、各インデックスには、比較に使用できる質問と回答のグループが必要です。

これは、実際には非常に単純であるべきことについて、かなり混乱した言い方です。「6つのカテゴリがあります」と言えます。しかし実際には、ArrayList のサイズを修正したり事前に決定したりする必要はありません。

基本的に、配列リスト内の配列だと思います。

ArrayList 内で ArrayList を (間接的に) 使用します。Lists/ArrayLists は、(配列とは異なり) 事前にサイズ変更または拡張する必要がないため、動的に構築する方がはるかに優れています。

ただし、「質問」リストはカテゴリオブジェクト内に保持する必要があることに注意してください。

于 2013-09-23T23:46:29.730 に答える