这是我想完成的事情:


  编写一个程序来激发
  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/

10-11 10:53