这是我想完成的事情:
编写一个程序来激发
bean machine您的程序应
提示用户输入号码
球和插槽的数量
机。模拟每个跌落
球通过打印其路径。
例如
输入球数:5
输入插槽数:7
LRLRLRL RRLRLLL LLRRLLR
_ _ _ 0
_ _ 0 0 0 0
到目前为止,这是我的代码:
import javax.swing.JOptionPane;
public static void main(String[] args) {
int balls=0;
int slots=0;
char [] direction= new char [slots];
int slot=0;
int i=0;
int path=0;
balls= Integer.parseInt(JOptionPane.showInputDialog("Enter" +
" the number of balls to be dropped:"));
slots= Integer.parseInt (JOptionPane.showInputDialog("Enter " +
"the number of slots:"));
for (int j=1;j<=balls;j++){
while(i<slots){
path= (int)(Math.random()*100);
if (path <50){
direction [slots]='L';
}
else{
direction [slots]='R';
}
i++;
slot++;
}
System.out.println("The pathway is" +direction[0]+direction[1]+direction[2]+direction[3]+direction[4]);
}
}
我遇到一些问题:
在我尝试打印路径的代码的最后一行中,我基本上必须猜测用户选择的插槽数。有没有更好的打印方法?
我如何打印用户在上图所示的模式中输入的数字“ balls”?
我的代码还有其他问题吗?
最佳答案
好吧,对于初学者来说,我在ArrayIndexOutOfBoundsException
(或direction[slots] = 'L';
)行上获得了一致的'R'
。这是因为direction
始终为0,因为您在slots
为0时将其初始化为slots
。
char [] direction= new char [slots];
输入
slots
之后到。接下来,始终将“ L”或“ R”分配给数组结尾之后的位置。这是我得到
ArrayIndexOutOfBoundsException
的另一个原因。将分配更改为direction[i] = 'L'; // or 'R'
接下来,您无需在
i
循环后重置while
。因此,仅针对第一个球计算路径,然后对所有其他球重新使用。我将其改为for
循环,如下所示:for (i = 0; i < slots; i++) {
// your code here (make sure you don't change i inside the loop)
}
最后,正如其他人所说,您应该使用循环来打印出路径。您知道
direction
数组有多长时间(如果您不知道,它是direction.length
),因此您可以循环遍历并打印出每个字母。做出这些更改后,您的程序应该可以工作(编辑:除了不能跟踪每个球最终进入哪个插槽外)。仍然会有一些改进的空间,但是找到这些东西是乐趣的一部分,不是吗?
关于java - Java bean机器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/686588/