Home > database >  I am making a histogram
I am making a histogram

Time:01-15

I am trying to make a histogram with inputting a value and rounding it. The rounded value should print out the number of asterisks.

I did the following code and inputted a value but, the output is coming out as nothing.

public class Histogram
{
    public static void main(String args[]) 
    {
      histogram obj = new histogram();
      obj.histogram(13.5);
    }
}

class histogram
{
    public void histogram(double num)
    {
        int roundNum = (int)(num);
        if (roundNum == 14)
        {
            System.out.println("**************"   num);
        }
        if (roundNum == 3)
        {
            System.out.println("***"   num);
        }
        if (roundNum == 16)
        {
            System.out.println("****************"   num);
        }
        if (roundNum == 0)
        {
            System.out.println(""   num);
        }
        if (roundNum == 1)
        {
            System.out.println("*"   num);
        }
    }
}

CodePudding user response:

In Java, typecasting to primitive type int from primitive type double can be thought of as simply removing the decimal part.

For example;

System.out.println((int) 13.1); // prints 13
System.out.println((int) 13.5); // prints 13
System.out.println((int) 13.9); // prints 13

So, when you call obj.histogram(13.5); with the function parameter num being 13.5, the operation int roundNum = (int)(num); is the same as int roundNum = (int)(13.5);, and assigns 13 to the roundNum variable.

Since no if statements handle this case (roundNum being 13), no output is generated.

On another note, hardcoding a lot of if statements for checking the same variable over and over again can usually lead to unnecessarily complex, inefficient and hard-to-read code. Can you think of a better way to print "*" characters for the histogram, by using the roundNum variable? (Hint: try experimenting with for loops)

CodePudding user response:

Change your int roundNum = (int)(num); to int rounded = Math.round((float)num); it should give you the desired output.

  • Related