Actualmente estoy trabajando en una tarea de clase que implica calcular la cantidad de pintura necesaria para cualquier número de paredes con dimensiones individuales, lo que pasa es que lo configuré todo y todos los cálculos y todo salió correctamente.

Estoy usando una declaración IF para desviar la UE al bloque de código correcto, pero por alguna razón cuando uso la sección de pies a galones imperiales, todavía intenta ejecutar la sección de metros a litros también. Claramente me falta algo al final de mi primera declaración IF y bucle DO WHILE (bucles utilizados para calcular el área total de las paredes y el área superior de la habitación) Me preguntaba si alguien podría echarle un vistazo rápido y apúntame en la dirección correcta. A continuación se adjunta el código si alguno de ustedes pudiera ayudar.

(disculpas por las discrepancias que publiques por primera vez aquí, así que sé amable jajaja)

public static void main(String[] args) throws IOException
{
        double widthOfWall = 0;
        double lengthOfWall = 0;
        double areaOfWall = 0; 
        double areaOfRoom = 0;
        double paintNeeded = 0;
        char   UnitsUsed = ' '; 
        char   extraCalc = 0;
        
        
        
    //Scanner class
    Scanner keyboard = new Scanner (System.in);
    
    {   
    System.out.println("Are using Feet or Metre? (F/M)");
    UnitsUsed = ValidateData.checkTwoChars('F', 'M');
    {
        {   
if (UnitsUsed == 'F')
    
    do{ 
        System.out.println("Please enter width of the wall");
        widthOfWall = keyboard.nextDouble();
        
        System.out.println("Please enter the Length of the wall");
        lengthOfWall = keyboard.nextDouble();
        
        areaOfWall = widthOfWall * lengthOfWall; 
        System.out.println("The area of this wall is " + areaOfWall);
        
        System.out.println("Do you require an additional calculation? ");
        extraCalc = ValidateData.checkTwoChars('Y', 'N'); 
        
        areaOfRoom += areaOfWall;
        areaOfWall ++; 
        
        
System.out.println("The area of the room " + areaOfRoom);
        
        
        paintNeeded = areaOfRoom / 6.229; 
        System.out.println("The amount of paint needed (in Imperial Gallons) " + paintNeeded);
        }
        while (extraCalc == 'Y'); 
        

else if (UnitsUsed == 'M');
    
    //Do while loop
    do{ 
    System.out.println("Please enter width of the wall");
    widthOfWall = keyboard.nextDouble();
    
    System.out.println("Please enter the Length of the wall");
    lengthOfWall = keyboard.nextDouble();
    
    areaOfWall = widthOfWall * lengthOfWall; 
    System.out.println("The area of this wall is " + areaOfWall);
    
    System.out.println("Do you require an additional calculation? ");
    extraCalc = ValidateData.checkTwoChars('Y', 'N'); 
    
    areaOfRoom += areaOfWall;
    areaOfWall ++; 
    }
    while (extraCalc == 'Y'); 
    
    System.out.println("The area of the room " + areaOfRoom);
    
    paintNeeded = areaOfRoom / 12; 
    System.out.println("The amount of paint needed (in litres) " + paintNeeded);
    }




}
}}

}
0
DSAK 22 ene. 2021 a las 20:13

1 respuesta

La mejor respuesta

Aquí tiene un punto y coma en lugar de una llave de apertura {:

else if (UnitsUsed == 'M');

Además, eso es mucho código repetitivo, cuando la única diferencia entre las dos ramas son las unidades. Puede establecer el multiplicador y las unidades de las variables de cadena utilizando operadores ternarios, y luego eliminar el if / else para simplificar esto.

1
Tenfour04 22 ene. 2021 a las 17:19