Así que básicamente estoy tratando de tener un programa donde ingrese un conjunto de números separados por un espacio,

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

Y cuando supero los 100, el programa traza asteriscos según el rango de decenas en el que se encuentran (1-10, 11-20, etc.)

Sin embargo, el int 10 no se traza en mi histograma. He jugado y jugado con menos o igual que, diferentes índices comenzando int, etc., etc., pero creo que el problema se basa en mi método getData(int[] someArray), pero no estoy seguro de qué.

Código:

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();
        }

    } // 

Salida:

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!!

Tengo 10 y 1, ambos caen en el rango 1-10, pero eliminé el 1 del conjunto y no aparece ningún asterisco, por lo que definitivamente es el 10. Muchas gracias.

0
simonshampoo 17 abr. 2020 a las 07:46

2 respuestas

La mejor respuesta

Tu problema es esta línea:

int index = n / 10;

Para n = 1-9, eso calcula index = 0, es decir, el valor debe contarse en el primer depósito, es decir, el depósito 0.

Para n = 10-19, eso calcula index = 1, es decir, el valor debe contarse en el segundo segmento, es decir, el segmento 1.

Como puede ver, n = 10 se cuenta en el cubo incorrecto. Lo mismo ocurre con 20, 30, 40, ... 90, y es por eso que debe ignorar 100 con ese adicional si (index == 10) , aunque se supone que también cuenta eso.

Ver por ti mismo:

  • Intente ingresar 9 999 y 1-10 tiene *
  • Intente ingresar 10 999 y 11-20 tiene * (¡Vaya!).
  • Intenta ingresar 100 999 y no habrá estrellas (¡Vaya!).

Tu código debe ser:

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

Con el código, puede finalizar la entrada escribiendo 0, como las instrucciones dicen que puede, pero no funcionaba en el código de la pregunta.

1
Andreas 17 abr. 2020 a las 05:04

Estoy bastante seguro de que no se recomienda eliminar las preguntas aquí, pero lo he resuelto. Es porque puse un break en mi if ( index == 10).

-1
simonshampoo 17 abr. 2020 a las 04:52