Formatting Dice Roll Output Java

时光总嘲笑我的痴心妄想 提交于 2019-12-11 01:27:41

问题


I created a code where the user inputs the number of times that a dice will be rolled. The program then outputs the face values, the number of times each face came up, and a percentage frequency of each face. I have to use System.out.printf() to format the output.

My problem is that whenever I input a roll that is more than 9, the formatting of my output is completely thrown off... Here is my code:

package variousprograms;
import java.util.*;
public class DiceRoll 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int[] array = new int[7];
        System.out.print("Enter number of rolls: ");
        int roll = input.nextInt();

        System.out.printf("%s%8s%6s\n", "#", "Count", "Freq");
        for (int i = 1;i<=roll;i++)
        {
            array[(int)(6*Math.random()) + 1]++;
        }
        for(int a = 1; a<array.length; a++)
        {
            double percentage = ((double) array[ a ]/roll)*100;
            System.out.printf("%1d%6d%15.2f%%\n", a, array[ a ], percentage);
        }
        System.out.printf("%s%2s%10s\n", "Total", roll, "100%");


    }
}

I would appreciate any help!


回答1:


A possible solution is the below:

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] array = new int[7];
        System.out.print("Enter number of rolls: ");
        int roll = input.nextInt();

        System.out.printf("%-12s%-12s%-12s\n", "#", "Count", "Freq");
        for (int i = 1; i <= roll; i++) {
            array[(int) (6 * Math.random()) + 1]++;
        }
        for (int a = 1; a < array.length; a++) {
            double percentage = ((double) array[a] / roll) * 100;
            System.out.printf("%-12d%-12d%5.2f%%\n", a, array[a], percentage);
        }
        System.out.printf("%-12s%-14s%-12s\n", "Total", roll, "100%");
    }

Integer formatting

%d   : will print the integer as it is.
%6d  : will print the integer as it is. If the number of digits is less than 6, the output will be padded on the left.
%-6d : will print the integer as it is. If the number of digits is less than 6, the output will be padded on the right.
%06d : will print the integer as it is. If the number of digits is less than 6, the output will be padded on the left with zeroes.
%.2d : will print maximum 2 digits of the integer.

String formatting

%s    : will print the string as it is.
%15s  : will print the string as it is. If the string has less than 15 characters, the output will be padded on the left.
%-6s  : will print the string as it is. If the string has less than 6 characters, the output will be padded on the right.
%.8d  : will print maximum 8 characters of the string.

Floating point formatting

%f    : will print the number as it is.
%15f  : will print the number as it is. If the number has less than 15 digits, the output will be padded on the left.
%.8f  : will print maximum 8 decimal digits of the number.
%9.4f : will print maximum 4 decimal digits of the number. The output will occupy 9 characters at least. If the number of digits is not enough, it will be padded

A full tutorial here.



来源:https://stackoverflow.com/questions/39650126/formatting-dice-roll-output-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!