Я хотел бы напечатать график, но я напечатал его вверх ногами. Почему?


Моя программа заполнила целочисленный массив числами, я назвал его count array:

int[] array count = {5, 4, 3, 0};

Теперь я хочу напечатать мой массив графически горизонтально, используя for loop(s). Я хочу напечатать все мои значения в asteriks, например:

   *     
   *        *
   *        *        *
   *        *        *
   *        *        *
count(0) count(1) count(2) count(3)

Сначала я хочу узнать, каково мое максимальное значение моего массива. Если это максимальное значение = соответствует, то я печатаю как asteriks в противном случае пробел. Однако я не могу просто зациклиться, и сделать maxint-1, и проверить, есть ли там совпадение, потому что тогда я только получу в Астерикс на максимальное значение из каждого массива, и остального пространства.

Поэтому я попытался обойти и начать с каждого минимального значения и работать вверх.

for (int k = 0; k <= 6; k++) {
    System.out.println("NEXTLINE"); 
    maxInt = (maxInt - maxInt) + k;  
    for (int i = 0; i < controleArray.length; i++ ) { 
            int graphLetter = letterCount[i];
            for (int j = 0; j < 25; j++) { 
            //System.out.println("TESTinner ");  
                if (graphLetter > maxInt) {
                    System.out.print(" * ");
                    break;  
                } if (graphLetter <= maxInt) {
                    System.out.print(" ");
                    break; 
                }
            }

Пока этот код подсчитывает каждое значение моего массива и печатает астерики. Тем не менее, там печатаются вверх ногами. Таким образом, выход будет выглядеть следующим образом.

*   *   *   NEXTLINE
*   *   *   NEXTLINE
*   *   *   NEXTLINE
*   *       NEXTLINE
*           NEXTLINE

Почему это происходит? И как лучше посмотреть на это решение?

2 2

2 ответа:

 maxInt = (maxInt - maxInt) + k;

(maxInt-maxInt) всегда равно нулю, поэтому здесь что-то не так.

Вы можете использовать maxInt просто как триггер, используя value>=maxInt вместо ==, а затем вы можетепросто замкнуть , как вы говорите.

Тогда вам понадобятся только два цикла: внешний, повторяющийся для каждой строки, и внутренний для каждого бара графика, что-то вроде:

//Given the max value of the graph maxInt
for (int i=maxInt;i>0;i--) {
    for (int j=0;j<count.length;j++) {
        if (count[j]>=i) {
            System.out.print(" * ");
        } else {
            System.out.print("   ");
        }
    }
    System.out.println("NEWLINE");
}
Я думаю, что этот способ более элегантен (так как он проще и легче понять.
for (int k = 6; k >= 0; k--) {
    System.out.println("NEXTLINE"); 
    maxInt = (maxInt - maxInt) + k;  
    for (int i = 0; i < controleArray.length; i++ ) { 
            int graphLetter = letterCount[i];
            for (int j = 0; j < 25; j++) { 
            //System.out.println("TESTinner ");  
                if (graphLetter > maxInt) {
                    System.out.print(" * ");
                    break;  
                } if (graphLetter <= maxInt) {
                    System.out.print(" ");
                    break; 
                }
            }

Попробуйте Это.