2

Beanマシンは、三角形の形で等間隔に配置されたペグを備えた直立したボードです。ボードの開口部からボールを​​落とします。ボールがペグに当たるたびに、50%の確率で左または右に落下します。ボールの山は、ボードの下部にあるスロットに蓄積されます。

私は、ランダムな左または右を生成する場所にプログラムを作成しています。出力を次のような基本にします。

Drop a ball? Yes...
LRLRLRR
Drop a ball? Yes...
RRLLLRR
Drop a ball? Yes...
LLRLLRR
Drop a ball? Yes...
RRLLLLL
Drop a ball? Yes...
LRLRRLR

    0
    0
0 0 0

Bean Machineのボールのパスの出力を表示する場所にありますが、ボールとスロットがあり、スロットにボールがある配列をどのように表示するのかわかりません...

これが私のコードの主要部分です、私は彼らがこの問題を引き起こしていないと確信しているので、私は典型的な表示方法などを投稿していません

    import java.util.Scanner;
    import java.util.Random;

    public class BeanMachine {

        //constants 
        static final int LEFT = 0;
        static final int RIGHT = 1;
        static final char BALL = 'O';
        //constants for options
        static final int STANDARD_GAME = 0;
        static final int QUIT = -1;

        //Scanner for input
        static Scanner keyboard = new Scanner(System.in);

        //two-dimensional array to represent the bean machine
        int ballsNo;
        int slotsNo;
        char[][]slots = new char[ballsNo][slotsNo];


//***MAIN METHOD***********************************************************

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

    int userChoice = QUIT;
    boolean done = false;

    System.out.print("Enter the number of balls you want to drop: ");
    int ballsNo = keyboard.nextInt();

    System.out.print("Enter the number of slots you want in the bean machine: ");
    int slotsNo = keyboard.nextInt();



    do {
        displayMenu();
        userChoice = getUserChoice();

        switch (userChoice) {

            case STANDARD_GAME:
                dropBall(slotsNo);
                break;
            case QUIT:
                done = true;
                break;
            default:
                System.out.println("Continue playing?");
        }
    } while(!done);
}//end of main method   

//***CLEAR SLOTS*********************************************************** 

public void clearSlots(int ballsNo1, int slotsNo1){
    for (ballsNo = 0; ballsNo < ballsNo1; ballsNo++) {
        for (ballsNo = 0; slotsNo < slotsNo1; slotsNo++) {
            slots[ballsNo][slotsNo] = 0;
        }
    }   
}

//***DROP BALL*****************************************************************

static int dropBall(int slotsNo) {


    int rights = 0;
    int position = 0;

    while (position < slotsNo-1){
        if (Math.random() < 0.5) {
                    System.out.println("L");
        }
                            else{                     
                            System.out.println("R");
                            rights++;   
                  }
                  position++;
    }

      return rights;

}//end of dropBall

//***DISPLAY BOARD**********************************************************    

static void displayBoard(int ballsNo, int slotsNo, char [][] slots){

    int count = 0;
    while(count<=slotsNo){
        System.out.println(slots[ballsNo][slotsNo]);
        count++;
    }
}   



    }//end of class 
4

1 に答える 1

1

配列を正しくループするだけです。それをグリッドと考える必要があり、それをどのように見るかに応じて、印刷方法が決まります。たとえば、次のようなグリッドがあるとします。次のようにchar[3][4]視覚化できます。

   0 1 2   <- this would be your columns
0 | | | |
1 | | | |
2 | | | |
3 |_|_|_|
^
| 
this would be your rows

または、次のように視覚化することもできます。

   0 1 2   <- this would be your columns
3 | | | |
2 | | | |
1 | | | |
0 |_|_|_|
^
| 
this would be your rows

したがって、アイテムがどこにあると思うかによって異なります(0,0)(0,0)次の例では、が右下にあると想定しています。

public class BeanMachine {

    static final char BALL = 'O';
    static char[][] slots;

    public static void main(String[] args) {
        int height = 10;
        int width = 5;
        slots = new char[height][width];

        // just adding some stuff in here so we have something to print
        slots[0][0] = BALL; // bottom left
        slots[9][4] = BALL; // top right

        displayBoard();
    }

    static void displayBoard() {
        // we need to loop through each row
        String columnSeperator = "|";
        for (int i = slots.length - 1; i >= 0; i = i - 1) {
            String row = columnSeperator;
            for (int j = 0; j < slots[i].length; j = j + 1) {
                // char seems to be initialized to ' ' so we do not need to do
                // any checks and just add the value in the array.
                row = row + slots[i][j] + columnSeperator;
            }
            System.out.println(row);
        }
    }

}
于 2012-11-27T18:46:31.637 に答える