Bean Machine Galton Box Java显示

时间:2012-11-27 18:10:08

标签: java multidimensional-array

豆机是一个直立的板 均匀间隔的三角形钉。 球从开口处掉落 板。每次球击中钉子时,它都有 有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 

1 个答案:

答案 0 :(得分: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);
        }
    }

}