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