Escáner de Java/Pirámide de matriz

Así que estoy tratando de hacer una pirámide de valores agregados. Ex. La línea 1 tiene (5), la línea 2 tiene (6,7) la línea 3 tiene (12,10,7). El objetivo es sumar el valor más alto de la primera línea, con el valor secundario de conexión más alto de la siguiente línea. Entonces, en este caso, agregaría 5+7+10, lo que le daría un resultado de 22. La razón por la que no puede usar el 12 en la línea 3 es porque tiene que usar un hijo del número anterior (Cada padre tiene 2 niños).

Mi enfoque es usar Scanner para cargar valores int en una matriz línea por línea y, de alguna manera, indexar la posición del valor secundario más alto de la línea anterior para agregarlo a un total acumulado. Aquí está el código que tengo hasta ahora...

//en el archivo de datos...

5

6 7

12 10 7

//eso es todo.

    public static void main(String[] args) {
    Scanner scanner = null;
    try {
        scanner = new Scanner(new File("/users/joe/desktop/data.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("File not found.");
        e.printStackTrace();

    } //reads the file

    int[] a = new int[100]; //establishes new array with a max size of 100
    int i = 0; //placeholder for array position
    int result = 0;
    int total = 0;

    while(scanner.hasNextLine()){ //loops through line
        a[i++] = scanner.nextInt(); //adds int to array
        if(i == 0){ //does this belong here?
            result = a[0];
        }
        else{
            if(a[i-1] >= a[i+1]){
                result = a[i-1];
            }
            else if(a[i-1] <= a[i+1]){
                result = a[i+1];
            }
        }
    }
    total =  total + result;
    scanner.close();

    System.out.print(Arrays.toString(a));
    System.out.println("\n" + total);


    }
    }

Actualmente, esto imprimirá: [5,6,7,12,10,7,0,0,0,0,0,... hasta 100 posiciones]

5

¿Cómo puedo hacer que el escáner lea una línea, la cargue en una matriz, la repita y guarde el valor secundario más alto de la matriz de la siguiente línea?

preguntado el 04 de julio de 12 a las 02:07

1 Respuestas

Cuando ejecuto ese código, obtengo una NoSuchElementException después de leer todos los números. Esto ocurre porque siempre está buscando la siguiente línea del archivo, pero leyendo el siguiente entero.

Hay tantas fallas lógicas en el código que es difícil comentarlas todas. Aquí hay algunos en los que podrías trabajar:

Solo agrega total + resultado UNA VEZ, fuera de su ciclo. Debe mover eso dentro de un ciclo para que el total se calcule correctamente

Calculas el resultado incorrectamente. Como mínimo, debe tener una variable que indique la posición del número más alto en la última fila. También está comparando i -1 con i+1... esto no funcionará cuando llegue a la última fila, ya que comparará elementos a ambos lados de i en lugar de elementos debajo de i.

Recomiendo leer las variables en una matriz 2D triangular. Puede hacer esto creando otro escáner para cada línea; leer cada línea en el nuevo escáner; y el sondeo de nextInt(). Esto le permite comparar arr[row][pos] y arr[row][pos+1] que serán los hijos de arr[row-1][pos].

Una vez que pueda leer el archivo en una matriz 2D e imprimirlo desde la matriz para que se vea como el contenido del archivo, y si todavía tiene problemas, regrese y puedo brindarle más ayuda.

Respondido 04 Jul 12, 03:07

Oh, sabía que estaba mal, el if/else ni siquiera funciona, pero haré las correcciones, ¡gracias! - Joe R.

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.