-5

これは、画面上で最大 3 つの数字が点滅し、数秒間消えてからユーザーに数字を再生するように求める記憶実験です。ユーザーの回答の精度を計算するために配列を使用しようとしています。そのため、どの数値がどこにあるかを知るために、ランダムジェネレーターメソッドで2次元配列を使用しようとしていました. かなり非効率かもしれませんが、頑張っています。これが私がこれまでに持っているものです...

import java.util.*;

public class Pitt3 
{
    static int pause = 4;
    static int Screen_Size = 100;

    public static void main(String[] args) 
    {
        Scanner keyboard = new Scanner(System.in);

        //USED TO CALC. USER'S ACCURACY
        int accuracy = 99;

        for (int x = 0; x<2; x++)
        {
            //CREATES ARRAYS TO GENERATE DIGITS
            int[] array1 = new int[generateDigits(1)];
            int[] array2 = new int[generateDigits(1)];
            int[] array3 = new int[generateDigits(1)];


            //PRINTS OUT #'S + PAUSES
            System.out.println("Here are your numbers: ");
            System.out.println(generateDigits(1));
            System.out.println(generateDigits(1));
            System.out.println(generateDigits(1)); pause(4);


            //SPACES OUT THE QUESTION FROM ANSWER
            System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + 
            "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + 
            "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

            //PRINTS OUT #'S + PAUSES
            System.out.println("What is the first number? ");
            int ANSWER1a = keyboard.nextInt();

            System.out.println("What is the second number? ");
            int ANSWER1b = keyboard.nextInt();

            System.out.println("What is the third number? ");
            int ANSWER1c = keyboard.nextInt();


            if (ANSWER1a != array1[0] || ANSWER1b != array2[0] || ANSWER1c != array3[0])
            {
                accuracy = (accuracy - 33);
            }

            if (ANSWER1a == array1[0] || ANSWER1b == array2[0] || ANSWER1c == array3[0])
            {
                accuracy = accuracy;
            }

            System.out.println("Your accuracy was " + accuracy + "%");


        }

    }




    /**
     *GENERATES A RANDOM #
     */
    public static int generateDigits(int maxDigits)
    {
        Random generator = new Random();
        int numberDigits = generator.nextInt(maxDigits) + 1;
        int result = 0;

        for(int n = 0; n < numberDigits; n++)
        {
            result = result + generator.nextInt(10);
        }

        return result;

    }

    /**
     *SETS COMP. TO SLEEP FOR SPECIFIED SECONDS
     */
    public static int pause (int seconds)
    {
        try
        {
            Thread.sleep(seconds * 1000);
        }

        catch (InterruptedException e){}
        return pause;
    }


}
4

2 に答える 2

2

あなたの質問が何であるかはわかりませんが、デバッガーを使用してこのコードをチェックし、コードが実際に何をしているのかを理解します。あなたが思っていることをしていないコードがたくさんあるからです。

初心者によくある間違いは、コードをテストせずに書きすぎたり、場合によってはコンパイルをチェックしたりしないことです。これにより、修正が非常に困難な大規模な混乱が発生します。

コンパイルされるコードの小さなセクションからやり直すことをお勧めします。メソッドを使用してコードを分割し、動作をテストします。

例えば、

String[] array = new String[generateDigits(3)]; 

これにより、ランダムな長さのnull値の配列が作成されます


これがどのようにコンパイルされるかはわかりませんが、もしそうなら、あなたが望んでいたことをするとは思えません。

array[0][0] = ANSWER2a;
array[0][1] = ANSWER2b;
array[0][2] = ANSWER2c;

if (ANSWER2a == generateDigits[0][0])
{

}

if (ANSWER2a != generateDigits[0][0])
{
    accuracy = accuracy - 50;
}

これにより、同じ回答に対してこれらの行の両方を出力できます。

if (ANSWER1 == generateDigits(3))
{
    System.out.println("You were 100% accurate");
}

if (ANSWER1 != generateDigits(3))
{
    System.out.println("You were 0% accurate");
}

これにより、0 から 27 の間の数値が生成されますが、これはあなたが考えていたものではありません。

for(int n = 0; n < numberDigits; n++)
{
    result = result + generator.nextInt(10);
}

この方法は役に立たないようです。私はそれを削除します

public static void pause (int seconds)

コードが実際に何をしているのかを考える必要があります。

于 2013-05-11T21:56:37.217 に答える