1

I am making a histogram project for school that loops through an array and creates a * for every time a number comes up for a given section of numbers. The output should look like this:

1-10   | *****
11-20  | ****
21-30  | *
31-40  | ***
41-50  | *
51-60  | *
61-70  | *
71-80  | 
81-90  | *
91-100 | ********

for an array that is:

int array[] = {19, 4, 15, 7, 11, 9, 13, 5, 45, 56, 1, 67, 90, 98, 32, 36, 33, 25, 99, 95, 97, 98, 92, 94, 93, 105};

I am trying to figure out a way to make this code more OOPy. However, I can't figure out a way to.

Here is my code:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int array[] = {19, 4, 15, 7, 11, 9, 13, 5, 45, 56, 1, 67, 90, 98, 32, 36, 33, 25, 99, 95, 97, 98, 92, 94, 93, 105};
        histogram(array);
    } 
    public static void histogram(int[] input) {
        String output1 = new String ();
        String output2 = new String ();
        String output3 = new String ();
        String output4 = new String ();
        String output5 = new String ();
        String output6 = new String ();
        String output7 = new String ();
        String output8 = new String ();
        String output9 = new String ();
        String output10 = new String ();
        for (int x = 0; x < input.length; x++) {
            if (input[x] <= 100) {
                if (input[x] >= 1 && input [x] <= 10) output1 += "*";
                if (input[x] >= 11 && input [x] <= 20) output2 += "*";
                if (input[x] >= 21 && input [x] <= 30) output3 += "*";
                if (input[x] >= 31 && input [x] <= 40) output4 += "*";
                if (input[x] >= 41 && input [x] <= 50) output5 += "*";
                if (input[x] >= 51 && input [x] <= 60) output6 += "*";
                if (input[x] >= 61 && input [x] <= 70) output7 += "*";
                if (input[x] >= 71 && input [x] <= 80) output8 += "*";
                if (input[x] >= 81 && input [x] <= 90) output9 += "*";
                if (input[x] >= 91 && input [x] <= 100) output10 += "*";
            }
            else {
                break;
            }
        }
        System.out.println("1-10   | " + output1);
        System.out.println("11-20  | " + output2);
        System.out.println("21-30  | " + output3);
        System.out.println("31-40  | " + output4);
        System.out.println("41-50  | " + output5);
        System.out.println("51-60  | " + output6);
        System.out.println("61-70  | " + output7);
        System.out.println("71-80  | " + output8);
        System.out.println("81-90  | " + output9);
        System.out.println("91-100 | " + output10);

    }
}
dcsohl
  • 7,186
  • 1
  • 26
  • 44
  • 3
    All those `output` Strings are _screaming_ for a String array... – byxor Dec 13 '16 at 15:42
  • ...or StringBuilder (http://stackoverflow.com/questions/5234147/why-stringbuilder-when-there-is-string) – Pshemo Dec 13 '16 at 15:44
  • A good beginner's first step for any OOP program is to describe the program in plain English and carefully examine the nouns (for potential classes) and the verbs (for potential methods), and use that as a starting point. "Given a *list of numbers*, I need to *output* a *chart* where each *row* represents a *range of numbers*, and *sort* the input list into those ranges, and *print* one *star* for each number in a range." (**NB**: I am not suggesting *all* nouns are classes or *all* verbs are methods; just look at them and think about how you might proceed.) – dcsohl Dec 13 '16 at 15:49

1 Answers1

1

Why make it simple when you can make it complicated?

public static void main(String[] args) {         
   int array[] = {19, 4, 15, 7, 11, 9, 13, 5, 45, 56, 1, 67, 90, 98, 32, 36, 33, 25, 99, 95, 97, 98, 92, 94, 93, 105}; 
   histogram(array);
}
public static void histogram(int[] input) {
    for(int i = 1; i<101; i = i+10){
        System.out.print(i + "-" + (i+9) + "\t| ");
        for(int j = 0; j< input.length; j++){
            if(input[j] >= i && input[j] < i+10)
            System.out.print("*");
        }
        System.out.println();
    }
}
Eritrean
  • 15,851
  • 3
  • 22
  • 28
  • LOL yea why make it simple? Thank you for your input. I tested the code and it does work. I saw the /t before and was thinking about using it but I wasn't sure what it did. Nice job! – Dominic Alexander Dec 13 '16 at 16:30