我试图在彼此旁边画一些骰子,但我还没有成功。我认为有一种比用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("* * * * *");
}
}
答案 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(+ =)更有效。
编辑:我很抱歉没有开始的解决方案。我写这篇文章时无法测试,不幸的是,有一些错误。它们现在已经修好了。