Гистограмма с использованием массивов, не считая int 10 в конечной гистограмме - PullRequest
0 голосов
/ 17 апреля 2020

Итак, я пытаюсь создать программу, в которой я вводю набор чисел, разделенных пробелом,

10 20 30 40 50 60 70 80 90 11 22 33 44 55 66 77 88 99 1 31 31 45 98 99 100 500,

и когда I go больше 100, программа строит звездочки в зависимости от того, в какой десятковый диапазон они попадают (1-10, 11-20 и др. c.)

Однако int 10 не отображается на моей гистограмме. Я играл и возился с меньшими или равными различными индексами, начиная с int, et c, et c. но я думаю, что проблема кроется в моем getData(int[] someArray) методе, но я не уверен, что.

Код:

public class DistributionChart1 {

    public static void main(String[] args) {
        int size = 10;
        int[] ranges = new int[size]; // each entry represents a range of values

        getData(ranges); // pass the entire array into the method

        displayChart(ranges);

        System.out.println("\nSee you later!!");

    } // end of main

    public static void getData(int[] someArray) {

        Scanner scan = new Scanner(System.in);

        System.out.println("Enter a series of numbers between 1 and 100. Separate each number with a space.");
        System.out.println("Signal the end by entering a number outside " + "of that range and then press enter.");
        System.out.print("Go: ");

        // reads an arbitrary number of integers that are in the range 1 to 100
        int n;
        while (scan.hasNext()) {
            n = scan.nextInt();
            if (n > 100) {
                break;
            }

            int index = n / 10;

            if (index == 10) {
                index -= index;
                break;
            }
        // for each integer read in, determine which range it is in and increment the
        // corresponding element in the array

            someArray[index] += 1;

        }

        scan.close();
    }// end of getData

    public static void displayChart(int[] someArray) {
        // Print chart title with your name
        System.out.println("\nDistribution Chart By simonshampoo" + "\n===================================");
        // Print histogram.

        for (int i = 0; i < 10; i++) {
            int beginning = i * 10 + 1;
            int ending = beginning + 9;
            System.out.print(beginning + "-" + ending + "\t|");

            for (int j = 0; j < someArray[i]; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

    } // 

Выход:

Enter a series of numbers between 1 and 100. Separate each number with a space.
Signal the end by entering a number outside of that range and then press enter.
Go: 10 20 30 40 50 60 70 80 90 11 22 33 44 55 66 77 88 99 1 31 31 45 98 99 100 500

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

See you later!!

У меня есть 10 и 1, оба попадают в диапазон 1-10, но я удалил 1 из установлен и звездочка не отображается, так что это определенно 10. Спасибо большое

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Ваша проблема в этой строке:

int index = n / 10;

Для n = 1-9, который вычисляет index = 0, то есть значение должно быть посчитано в 1-й группе, т. Е. В группе 0.

Для n = 10-19, это вычисляет index = 1, то есть значение должно быть подсчитано во 2-м сегменте, т. Е. В интервале 1.

Как видите, n = 10 подсчитывается в неправильном интервале. , То же самое касается 20, 30, 40, ... 90, и именно поэтому вам нужно было игнорировать 100 с этим дополнительным if (index == 10), даже если он должен был это учитывать.

Убедитесь сами:

  • Попробуйте ввести 9 999 и 1-10 имеет *
  • Попробуйте ввести 10 999 и 11-20 имеет * (упс).
  • Попробуйте ввести 100 999, и звездочек не будет (Ой).

Ваш код должен быть:

while (scan.hasNext()) {
    int n = scan.nextInt();
    if (n < 1 || n > 100) {
        break;
    }
    int index = (n - 1) / 10;
    someArray[index]++;
}

С помощью кода вы можете завершить ввод, набрав 0, как указано в инструкциях, вы можете, но не работали в коде вопроса.

0 голосов
/ 17 апреля 2020

Я почти уверен, что удалять вопросы здесь не рекомендуется, но я понял это. Это потому что я положил break в свой if ( index == 10).

...