为了账号安全,请及时绑定邮箱和手机立即绑定

需要帮助打印双骰子滚动程序的直方图

需要帮助打印双骰子滚动程序的直方图

ABOUTYOU 2021-11-17 17:19:30
我已经浏览了以前的问题,并且真的试图弄清楚这一点。来到这里我觉得很脏,因为是的,这是作业,但我也试图联系我的教授。过去两周没有回复。我确信这是一个简单的修复,我只是没有得到它,但该死的我已经使用了一段时间并且被卡住了。先谢谢了。我似乎无法在总数的右侧打印星号。每个“*”代表总卷数的 1%。我想我拥有一切,但我一直无法弄清楚如何在右侧打印它们。所以,而不是;2:****3:******4:**等等..我明白了;****2:**3:*****4:等等..这是我的代码:import java.util.Random;import java.util.Scanner;    public class DoubleDiceRoll    {    public static void main(String[] args)    {  Random r = new Random();  Scanner in = new Scanner (System.in);  int[] frequency = new int[13];//Recording the number of times a number was rolled  int numRolls = 0;//How many rolls the user wants to simulate  int numAsterisks = 0;   int dieOne = 0;//Roll of die one  int dieTwo = 0;//Roll of die two  int rollTotal = 0;//Sum of the rolls of die one and two  String stars = "";   //Welcom user to the program  System.out.println("Welcome to the dice throwing simulator!");  System.out.println(" ");  System.out.println("How many dice rolls would you like to simulate?");  numRolls = in.nextInt();  //Simulate the number of rolls for die 1 and 2  for(int i = 0; i < numRolls; i++)  {     //Roll dieOne     dieOne = r.nextInt(6) +1;     //Roll dieTwo     dieTwo = r.nextInt(6) +1;     rollTotal = dieOne + dieTwo;      frequency[rollTotal]++;  }//end for  //Print Results  System.out.println("DICE ROLLING SIMULATION RESULTS" + "\n" + "Each \"*\" represents 1% of the total number of rolls." + "\n"                          + "Total number of rolls: " + numRolls);  System.out.println("");//Space between text and results                         //Create for loop for print statement  for(int total = 2; total < frequency.length; total++)  {       numAsterisks = 100 * frequency[total] / numRolls;      for(int j = 0; j < numAsterisks; j++)     {         System.out.println("*");     }     System.out.println(total + ": ");  }   }}我知道我已经将 * 设置为在总数之前打印,但是我尝试打印它的所有其他方式似乎都更加混乱。我已将 * 设置为等于一个字符串,例如:for(int j = 0; j < numAsterisks; j++) {   stars += "*"; }System.out.print (total + stars);但是 * 与正确的百分比不匹配,最终会打印出随机数量的星号。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

像这样尝试:


  System.out.print(total + ": ");

  for(int j = 0; j < numAsterisks; j++)

  {

         System.out.print("*");

  }

  System.out.println("");

完成打印 *s 后打印下一行


查看完整回答
反对 回复 2021-11-17
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

简单的解决方案是使用System.out.print(而不是println),它将在当前行上打印输出,例如...


System.out.print(total + ": ");

for (int j = 0; j < numAsterisks; j++) {

    System.out.print("*");

}

System.out.println("");

稍微更高级的解决方案是利用 Java 的String格式化功能


System.out.print(String.format("%2d: ", total));

for (int j = 0; j < numAsterisks; j++) {

    System.out.print("*");

}

System.out.println("");

它对齐列类似......


 2: 

 3: 

 4: 

 5: ********************

 6: ****************************************

 7: **********

 8: ********************

 9: 

10: **********

11: 

12: 

更高级的解决方案可能会利用 StringBuilder


StringBuilder sb = new StringBuilder(128);

sb.append(String.format("%2d: ", total));

for (int j = 0; j < numAsterisks; j++) {

    sb.append("*");

}

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


查看完整回答
反对 回复 2021-11-17
?
忽然笑

TA贡献1806条经验 获得超5个赞

您可能想先使用System.out.print()

含义:第一打印总计数,然后调用println的asteriks字符(一次性)。

这将为您提供正确的顺序并在您想要的地方换行!

只是为了记录:Java 11 提供String.repeat(),它允许您执行类似"*".repeat(numAsterisks);" 的操作来生成每行所需数量的星号字符。


查看完整回答
反对 回复 2021-11-17
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信