Java - Determinar y retorne la mayor de las tres dimensiones del paquete

 
Vista:
Imágen de perfil de Geraldine
Val: 53
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Geraldine (25 intervenciones) el 14/10/2018 01:01:07
Buenas compañeros, mi problema es el siguiente:

Resulta que el ejercicio me pide que los datos aparezcan con punto (Tal como sale en el ejemplo del profesor), el problema es que me da error y no se por que, ya que en otros ejercicios me ha salido bien, no se como solucionarlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package Pdespacho;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
import java.util.Scanner;
 
public class Despacho {
    //1-Determinamos la cantidad de registros:
    public static int cantReg() throws IOException{
        Scanner leer = new Scanner(new File("Despacho.txt"));
        int contador = 0;
 
        while (leer.hasNextLine()) {
            leer.nextLine();
            contador++;
        }
        leer.close();
        return contador;
 
    }
    //2-Leemos la cantidad de registros y almacenamos la informacion:
    public static void leerReg(String nom[], double pesoDimen[][]) throws IOException{
        Scanner leer = new Scanner(new File("Despacho.txt"));
        int f = 0;
 
        while (leer.hasNextLine()) {
            String linea = leer.nextLine();
            Scanner separar = new Scanner(linea);
            separar.useDelimiter(",");
            separar.useLocale(Locale.US);
 
            while (separar.hasNext()) {
            nom[f] = separar.next();
 
                for (int i = 0; i < pesoDimen[0].length; i++) {
                    pesoDimen[f][i] = separar.nextDouble();
                }
                f++;
            }
        }
    }
    //3-Mostrar por consola los datos almacenados en el archivo formateados: 
    public static void mostrarReg1(String nom[], double pesoDimen[][]){
        System.out.println("Nombre     Peso   alto   largo  ancho");
        //Organizamos los nombres:
        for (int i = 0; i < nom.length; i++) {
            System.out.printf("%-8s", nom[i]);
            //Organizamos los registros:
            for (int j = 0; j < pesoDimen[0].length; j++) {
                System.out.printf("%7.2f", pesoDimen[i][j]);
            }
            System.out.println();
        }
    }
    //4-Determinar y retornar la mayor de las tres dimensiones del paquete, sera privado:
}

Metodo Main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package Pdespacho;
import java.io.IOException;
 
public class Principal {
 
    public static void main(String[] args) throws IOException{
        int numeroReg;
        numeroReg = Despacho.cantReg();
 
        //Declaramos nuevas variables:
        String nombres[] = new String[numeroReg];
        double pesoDimen[][] = new double[numeroReg][4];
 
        //Mostrmos los resultados:
        Despacho.leerReg(nombres, pesoDimen);
        Despacho.mostrarReg1(nombres, pesoDimen);
    }
 
}

kDWZzU
https://ibb.co/kDWZzU

Otro detalle es que los últimos 4 métodos estoy confundida, por ejemplo, en el método 4 me dice que determine y retorne la mayor de las 3 dimensiones del paquete, pero mas abajo, en la parte que explica como sacar el perímetro dice que la mayor es la dimensión mas grande de las 3 cajas. Realmente no entiendo.

Digo, se que con un Switch puede determinar cual excede el peso y tal, pero aun así no entiendo bien los puntos 4,5 y 6. Si me pueden ayudar seria grandioso.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Kabuto (1381 intervenciones) el 14/10/2018 02:57:27
Hola.

Para conseguir el punto es mejor que establezcas, en el main, el Locale por defecto que te interese

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) throws IOException{
    Locale.setDefault(Locale.US);
    int numeroReg;
    numeroReg = Despacho.cantReg();
 
    //Declaramos nuevas variables:
    String nombres[] = new String[numeroReg];
    double pesoDimen[][] = new double[numeroReg][4];
 
    //Mostrmos los resultados:
    Despacho.leerReg(nombres, pesoDimen);
    Despacho.mostrarReg1(nombres, pesoDimen);
}


Con el resto de dudas, intentaré ayudarte más tarde. Ahora mismo, no tengo tiempo.

Si puedo aclararte en cuanto a lo del perimetro, que NO dice la mas grande de las 3 cajas, sino que dice que hay que obtener el mas grande de los tres lados de la caja.

Vamos, que para hallar el perimetro necesitaras valerte del metodo que hagas para cumplir el punto 4, de ahi que especifique que será private. Es decir, será un metodo interno de apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Geraldine
Val: 53
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Geraldine (25 intervenciones) el 14/10/2018 03:45:00
Oye muchas gracias! Andaba confundida con la parte del perimetro...
Sin embargo, sigue dando error cuando aplico el Locale en el Main, aun no se a que se debe.

https://ibb.co/dqNfr9

1
2
3
4
5
6
7
8
9
run:
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextDouble(Scanner.java:2413)
	at Pdespacho.Despacho.leerReg(Despacho.java:36)
	at Pdespacho.Principal.main(Principal.java:17)
C:\Users\Lisbeth\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Andrés (340 intervenciones) el 14/10/2018 10:03:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package Pdespacho;
 
import java.io.File;
import java.io.IOException;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.*;
 
public class Despacho {
 
    private final String ARCHIVO;
 
    public Despacho(final String archivo) {
 
        ARCHIVO = archivo;
 
    }
 
    public final void leerReg(final Vector<String> nombres, final double[][] pesoDimensiones) throws IOException, ParseException {
 
        Scanner leer = new Scanner(new File(ARCHIVO));
 
        int indice = 0;
 
        final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.FRANCE);
 
        while (leer.hasNextLine()) {
 
            String linea = leer.nextLine();
            Scanner lineaDatosPaquete = new Scanner(linea);
 
            nombres.add(lineaDatosPaquete.next());
 
            pesoDimensiones[indice][0] = NUMBER_FORMAT.parse(lineaDatosPaquete.next()).doubleValue();
            pesoDimensiones[indice][1] = NUMBER_FORMAT.parse(lineaDatosPaquete.next()).doubleValue();
            pesoDimensiones[indice][2] = NUMBER_FORMAT.parse(lineaDatosPaquete.next()).doubleValue();
            pesoDimensiones[indice][3] = NUMBER_FORMAT.parse(lineaDatosPaquete.next()).doubleValue();
 
            indice++;
 
        }
 
    }
 
    public final int cantReg() throws IOException {
 
        Scanner leer = new Scanner(new File(ARCHIVO));
 
        int registros = 0;
 
        while (leer.hasNextLine()) {
 
            leer.nextLine();
            registros++;
 
        }
 
        return registros;
 
    }
 
    public final void mostrarReg1(final Vector<String> nombres, final double[][] pesoDimensiones) {
 
        for (int i = 0; i < nombres.size(); i++) {
 
            System.out.println(String.format("%-8s %05.2f %05.2f %05.2f %05.2f", nombres.get(i), pesoDimensiones[i][0], pesoDimensiones[i][1], pesoDimensiones[i][2], pesoDimensiones[i][3]));
 
        }
    }
 
 
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package Pdespacho;
 
import java.io.IOException;
import java.text.ParseException;
import java.util.Vector;
 
public class Principal {
 
    public static void main(String[] args) throws IOException, ParseException {
 
        final String ARCHIVO = "/home/andreas/Downloads/Despacho.txt";
        final int COLUMNAS = 4;
 
        Despacho despacho = new Despacho(ARCHIVO);
 
        final int CANTIDAD_REGISTROS = despacho.cantReg();
 
        Vector<String> nombres = new Vector<String>();
        double[][] pesoDimensiones = new double[CANTIDAD_REGISTROS][COLUMNAS];
 
        despacho.leerReg(nombres, pesoDimensiones);
 
        despacho.mostrarReg1(nombres, pesoDimensiones);
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Geraldine
Val: 53
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Geraldine (25 intervenciones) el 15/10/2018 16:39:57
Muchísimas gracias Andres por tu respuesta, ahora tengo otra forma de resolver el mismo ejercicio... nunca usamos el NUMBER_FORMAT.
Así que este es un muy buen ejemplo :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Kabuto (1381 intervenciones) el 15/10/2018 00:23:09
Seguramente tengas que usar el Locale dos veces.

Una, tal y como ha puesto Andres, para "parsear" los datos del archivo de texto. Pues en el archivo de texto los datos están puestos con coma decimal y dara error al pasarlos a double para meterlos en la matriz, porque Java espera encontrar un punto decimal
Sin embargo, creando un objeto NumberFormat y cambiando su Locale, podemos parsear a double un String que use coma decimal

Dos, en el main, estableciendo el Locale a US para asegurarnos de que saldrán en pantalla con punto decimal tal y como pide el enunciado.

He estado haciendo el ejercicio por mi parte, y lo he completado entero. Te adjunto mis dos clases en este mensaje por si quieres consultarlas.

Lo he hecho de forma similar a lo que se ha publicado en este hilo, aunque en lugar de usar la clase Scanner para leer el archivo de texto, he preferido usar la clase BufferedReader

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Geraldine
Val: 53
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Determinar y retorne la mayor de las tres dimensiones del paquete

Publicado por Geraldine (25 intervenciones) el 15/10/2018 16:46:54
De pana pero de PANA muchísimas gracias Kabuto, eres un crack!! Ahora me pondré a estudiar el código. Le mando muchos abrazos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar