2

磨豆机是一块直立的木板,带有均匀分布的三角形钉子。球从板的开口处落下。每次球击中钉子时,它有 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 回答