如何连续打印3个骰子?

时间:2014-09-06 12:36:47

标签: java

我试图在彼此旁边画一些骰子,但我还没有成功。我认为有一种比用IF更好的方法。因此,如果有人知道如何做到这一点,我将非常感谢您的回复。

public static void main(String[] args) {

    int dice1 = 0;
    int dice2 = 0;
    int dice3 = 0;


    dice1 = (int) (Math.random() * 6 + 1);
    dice2 = (int) (Math.random() * 6 + 1);
    dice3 = (int) (Math.random() * 6 + 1);

    if (dice1 == 1) {
        System.out.println("* * * * *");
        System.out.println("*       *");
        System.out.println("*   #   *");
        System.out.println("*       *");
        System.out.println("* * * * *");
    }

    if (dice1 == 2) {
        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*       *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }
    if (dice1 == 3) {

        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*   #   *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }

    if (dice1 == 4) {
        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*       *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }

    if (dice1 == 5) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*   #   *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
    if (dice1 == 6) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }


    if (dice2 == 1) {

        System.out.println("* * * * *");
        System.out.println("*       *");
        System.out.println("*   #   *");
        System.out.println("*       *");
        System.out.println("* * * * *");
    }

    if (dice2 == 2) {

        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*       *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }
    if (dice2 == 3) {

        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*   #   *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }
    if (dice2 == 4) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*       *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
    if (dice2 == 5) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*   #   *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
    if (dice2 == 6) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }


    if (dice3 == 1) {

        System.out.println("* * * * *");
        System.out.println("*       *");
        System.out.println("*   #   *");
        System.out.println("*       *");
        System.out.println("* * * * *");
    }

    if (dice3 == 2) {

        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*       *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }
    if (dice3 == 3) {

        System.out.println("* * * * *");
        System.out.println("*    #  *");
        System.out.println("*   #   *");
        System.out.println("*  #    *");
        System.out.println("* * * * *");
    }
    if (dice3 == 4) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*       *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
    if (dice3 == 5) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*   #   *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
    if (dice3 == 6) {

        System.out.println("* * * * *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("*  # #  *");
        System.out.println("* * * * *");
    }
}

4 个答案:

答案 0 :(得分:3)

你可以去百万种方式,但我个人会把每个骰子放在一个多维数组中。首先,将每个芯片放入一个数组

String[] die1 = new String[]{
  "* * * * *",
  "*       *",
  "*   #   *",
  "*       *",
  "* * * * *"
}  

对于每一行,您可以像这样并排打印每个芯片

System.out.println(die1[0] + " " + die2[0]); // and so on for each of the 5 lines.

但是不是die1,die2等,而是将每个数组放入一个大的骰子数组中,这样你就可以通过索引(die [0] [0],die [1] [0]轻松引用每个die)等)。

String[][] dice = new String[][]{
 { "* * * * *", // Die 1 -> this line is dice[0][0]
   "*       *",
   "*   #   *",
   "*       *",
   "* * * * *"
 },
 { "* * * * *", // Die 2
   "*    #  *",
   "*       *",
   "*  #    *",
   "* * * * *"
 }
}

现在,并排打印线条非常简单:

int roll1 = 2; // Two made
int roll2 = 5; // up numbers
/* Note that the index will be one off from the reflected number.
You may want to subtract 1 from your random number or put a blank die at index 0
*/

for(int x=0; x<dice[roll1].length; x++){
  System.out.println(dice[roll1][x] + " " + dice[roll2][x]);
}

这样,你只需“画”一次,而不是骰子* numberOfRolls;你不需要大量的if-elses;它允许您通过连接字符串以任何方式打印骰子。

答案 1 :(得分:1)

您可以为骰子的每一行创建一个String变量。然后你可以根据骰子卷添加到字符串变量并在最后打印变量, 显示彼此相邻的骰子。

例如:

String ln1="";
String ln2="";
String ln3="";
String ln4="";
String ln5="";


if (dice1 == 2) {

   ln1+="* * * * *";
   ln2+="*    #  *";
   ln3+="*       *";
   ln4+="*  #    *";
   ln5+="* * * * *";
}
else if (dice1 == 3) {

   ln1+="* * * * *";
   ln2+="*    #  *";
   ln3+="*   #   *";
   ln4+="*  #    *";
   ln5+="* * * * *";
}

...

System.out.println(ln1);
System.out.println(ln2);
System.out.println(ln3);
System.out.println(ln4);
System.out.println(ln5);

希望这有帮助。

答案 2 :(得分:0)

我在测试中做到了,不要怀疑。

你想要那样的东西,对吧?

* * * * *   * * * * *   * * * * *
*  # #  *   *    #  *   *    #  *   
*       *   *       *   *   #   *   
*  # #  *   *  #    *   *  #    *   
* * * * *   * * * * *   * * * * *

以下方法可行,它以方法“rollTheDice()”开头 - 玩得开心:

    private final static String BORDER = "* * * * *";
    private final static String LEFT = "*  ";
    private final static String RIGHT = "  *";
    private final static String NEWLINE = "\n";
    private final static String NEXT_DIE = "   ";

    @Test
    public void doit() {
        this.rollTheDice();
    }

    private void rollTheDice() {
        int[] dice = { (int) (Math.random() * 6 + 1), (int) (Math.random() * 6 + 1), (int) (Math.random() * 6 + 1) };

        StringBuilder sb = new StringBuilder();
        sb.append(BORDER).append(NEXT_DIE).append(BORDER).append(NEXT_DIE).append(BORDER).append(NEWLINE);
        sb.append(this.createAllRows(dice, Position.TOP)).append(NEWLINE);
        sb.append(this.createAllRows(dice, Position.MIDDLE)).append(NEWLINE);
        sb.append(this.createAllRows(dice, Position.BOTTOM)).append(NEWLINE);
        sb.append(BORDER).append(NEXT_DIE).append(BORDER).append(NEXT_DIE).append(BORDER).append(NEWLINE);

        System.out.println(sb.toString());
    }

    private enum Position {
        TOP, MIDDLE, BOTTOM
    };

    private String createAllRows(int[] dice, Position pos) {
        String rows = "";
        for (int die : dice) {
            rows += this.createSingleRow(die, pos) + NEXT_DIE;
        }
        return rows;
    }

    private String createSingleRow(int die, Position pos) {
        String row = LEFT;
        switch (pos) {
            case TOP: {
                row += handleTop(die);
                break;
            }
            case MIDDLE: {
                row += handleMiddle(die);
                break;
            }
            case BOTTOM:
            default: {
                row += handleBottom(die);
            }
        }

        return row + RIGHT;
    }

    private String handleTop(int die) {
        switch (die) {
            case 1:
                return "   ";
            case 2:
                return "  #";
            case 3:
                return "  #";
            case 4:
                return "# #";
            case 5:
                return "# #";
            case 6:
            default:
                return "# #";
        }
    }

    private String handleMiddle(int die) {
        switch (die) {
            case 1:
                return " # ";
            case 2:
                return "   ";
            case 3:
                return " # ";
            case 4:
                return "   ";
            case 5:
                return " # ";
            case 6:
            default:
                return "# #";
        }
    }

    private String handleBottom(int die) {
        switch (die) {
            case 1:
                return "   ";
            case 2:
                return "#  ";
            case 3:
                return "#  ";
            case 4:
                return "# #";
            case 5:
                return "# #";
            case 6:
            default:
                return "# #";
        }
    }

答案 3 :(得分:0)

我不能为我的生活理解,为什么你会想要在控制台中绘制一组骰子,而不是只用一个数字写它: System.out.println("Dice1: " + dice1);

但我会咬人。创建一个名为Die的新类文件,并将以下代码复制到新文件中。

public class Die{
    public int value;
    Random r = new Random();

    public Die(){
        roll();
    }

    public void roll(){
        value = r.nextInt(6) + 1;
    }

    public String retrieveOneLineOfDrawing(int linenumber){
        switch(value){
            case 1:
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*       *";
                    case 3: return "*   #   *";
                    case 4: return "*       *";
                    case 5: return "* * * * *";
                    default: return "* * * * *";
                }
            case 2: 
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*    #  *";
                    case 3: return "*       *";
                    case 4: return "*  #    *";
                    case 5: return "* * * * *";
                    default: return "* * * * *";
                }
            case 3: 
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*    #  *";
                    case 3: return "*   #   *";
                    case 4: return "*  #    *";
                    case 5: return "* * * * *";
                    default: return "* * * * *";
                }
            case 4:
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*  # #  *";
                    case 3: return "*       *";
                    case 4: return "*  # #  *";
                    case 5: return "* * * * *";

                    default: return "* * * * *";
                }
            case 5:
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*  # #  *";
                    case 3: return "*   #   *";
                    case 4: return "*  # #  *";
                    case 5: return "* * * * *";

                    default: return "* * * * *";
                }
            case 6:
                switch(linenumber){
                    case 1: return "* * * * *";
                    case 2: return "*  # #  *";
                    case 3: return "*  # #  *";
                    case 4: return "*  # #  *";
                    case 5: return "* * * * *";

                    default: return "* * * * *";
                }

            default: return "* * * * *";
        }
    }
}

STOP!现在,删除“public static void main(String [] args){”中的所有内容,然后使用它。

public static void main(String[] args) {
    Die[] dice = new Die[3];
    dice[0] = new Die();
    dice[1] = new Die();
    dice[2] = new Die();
    int numberOfLinesInDrawings = 5;
    String s = "";

    for(int i = 1; i < numberOfLinesInDrawings+1; i++){
        for(int j = 0; j < dice.length; j++){
            s += dice[j].retrieveOneLineOfDrawing(i);
            if(j < dice.length - 1) s += "\t\t";
        }
        if(i < numberOfLinesInDrawings) s += "\n";
    }
    System.out.println(s);
}

这使您有机会增加图纸中的线条数量,这样就可以使它们更大。但是,它们都必须具有相同数量的线。此代码中没有真正的错误处理。如果您的numberOfLinesInDrawings数字与所有6个图纸都不匹配,则可能会出现例外情况。

如果你可以使用StringBuilder,那就改为:

public static void main(String[] args) {
    Die[] dice = new Die[3];
    dice[0] = new Die();
    dice[1] = new Die();
    dice[2] = new Die();
    int numberOfLinesInDrawings = 5;
    StringBuilder sb = new StringBuilder();

    for(int i = 1; i < numberOfLinesInDrawings+1; i++){
        for(int j = 0; j < dice.length; j++){
            sb.append(dice[j].retrieveOneLineOfDrawing(i));
            if(j < dice.length - 1) sb.append("\t\t");
        }
        if(i < numberOfLinesInDrawings) sb.append("\n");
    }

    System.out.println(sb);
}

StringBuilder比普通的String-concatenation(+ =)更有效。

编辑:我很抱歉没有开始的解决方案。我写这篇文章时无法测试,不幸的是,有一些错误。它们现在已经修好了。