1

以下のコメントは別の質問に答えています。これが私が新しい質問をする唯一の方法です...

わかった。私のプログラムは、.txt ファイルに情報を書き込むようなものです。現在、次のようにテキスト ファイルの最後に情報を書き込んでいます。

t/1/15/12
o/1/12/3
o/2/15/8
... (lots of lines like this.. all with different numbers)
o/1/16/4

次に..次を使用して行を追加すると:

BufferedWriter fw = new BufferedWriter(new FileWriter(new File("C://Users/Mini/Desktop/Eclipse/Japda/map/" +Numbers.map +".txt"), true));
            fw.newLine();
            fw.write(RightPanel.mode.charAt(0) +"/" +ID +"/" +Numbers.middlex +"/" +Numbers.middley);
            fw.close();

必要な行を追加しますが、現在はテキスト ファイルの最後に追加します。ただし、その行をテキスト ファイルの特定の部分に書き込みたいと思います。書き込みたい行の番号は既にわかっています。それ..(他の行に応じて計算されます..):Dそれを行う方法はありますか?または、そのテキスト ファイルの途中にある特定の行を編集するにはどうすればよいでしょうか?

4

2 に答える 2

1

必要なものを実現するには、RandomAccessFile を使用する必要があります。手順: 最初に RandomAccessFile を作成し、次に:

  1. 初期値が 0 (ファイルの先頭) に設定されている lineStart という変数を作成します。

  2. readline を使用してファイルを 1 行ずつ読み込む

  3. 前に挿入したいのが必須行かどうかを確認します

  4. それが正しい場所であれば、lineStart は前に挿入したい行の直前の位置を保持します。seek(0) を使用して最初に seek(0) を使用してファイルの先頭に配置し、次に seek(lineStart) を使用して必要な位置を取得することにより、 seek を使用して正しい場所に配置します。次に、writeChars を使用してファイルに書き込みます。改行を明示的に記述する必要があることに注意してください。

  5. 挿入したい場所でない場合は、getFilePointer を呼び出し、値を lineStart に格納します。

挿入したい場所に到達するまで、手順 2 ~ 5 を繰り返します。

于 2014-07-13T14:08:17.713 に答える
1

do-while ループが必要です:

do {
     //code
} while (expression);

ソース:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

おそらく次のようなものが必要です。

int[] done = new int[100];
int randomquestion;
do{
    randomquestion = (int)(Math.random() * 83 + 1);
    if(done[randomquestion] != 1)
    {
        //ask random question
        //if answer is correct, set done[randomquestion] = 1
        //else just let do-while loop run
    }
    //check if all questions are answered
} while (!areAllQuestionsComplete(done));

メソッド areAllQuestionsComplete(int[]) は次のとおりです。

private boolean areAllQuestionsComplete(int[] list)
{
    for(int i = 0; i<list.length; i++)
    {
        if(list[i] != 1)
        {
            return false;//found one false, then all false
        }
    }
    return true;//if it makes it here, then you know its all done
}

あなたの最新のコードを見る:

for(int i = 0; i<done.length; i++)
{
    done[i] = 0;//need default values else wise itll just be NULL!!!
}

do{
    ran = (int)(Math.random() * 83 + 1);
    //before entering the do-while loop, you must set default values in the entire done[] array
    if(done[ran] != 1)
    {
        //ask random question
        //if answer is correct, set done[ran] = 1
        //else just let do-while loop run

        if (ran == 1) { //1
        question = "kala";
        rightanswer = "fish";}
        if (ran == 2) { //2
        question = "peruna";
        rightanswer = "potato";}
        if (ran == 3) { //3
        question = "salaatti";
        rightanswer = "cabbage";}
        if (ran == 4) { //4
        question = "kalkkuna";
        rightanswer = "turkey";}
        if (ran == 5) { //5
        question = "kia";
        rightanswer = "tikku";}

        //YOU MUST HAVE EVERY CONDITION COVERED
        //say your random number makes the number 10
        //you dont set question to  anything at all (hence getting null!)           

        System.out.println(question);
        System.out.print("Vastaus?: ");
        answer = in.readLine();
        //if (answer == rightanswer){
        //must use .equals with Strings...not ==
        if (answer.equals(rightanswer)){            
        right++;
        done[ran] = 1;}
        else{wrong++;}
        }
        //check if all questions are answered
} while (!areAllQuestionsComplete(done));//use the method I wrote!

編集:

配列にデフォルト値を入れる必要があります。配列を作成するときのデフォルト値は null です。

int[] done = new int[100];//create array but everything is null
for(int i = 0; i<done.length; i++)
{
    done[i] = 0;//need default values else wise it'll just be NULL!!!
}
//must be done before the do-while loop starts

最後に、乱数ジェネレーターが正しい範囲の数値を選択していることを確認してください。サイズが 100 の配列がある場合、そのインデックスは 0 ~ 99 になります。これは、done[100] がないことを意味します。done[0] から done[99] までです。

done[] のサイズが 5 の場合、done[0] から done[4] の範囲になります。つまり、次のようにランダムに生成する必要があります。

randomquestion = (int)(Math.random() * 5 );

于 2013-08-12T19:17:49.390 に答える