# Calculadora Java para principiantes -- java campo con beginner campo con calculator camp codereview Relacionados El problema

## Beginners Java calculator

5

### problema

Español

Soy un principiante en la programación de Java, y creé una calculadora como mi primer proyecto Java. Por lo tanto, ¿puede revisar mi código y proporcionar comentarios / consejos?

` ` import java.util.Scanner;  public class Calculator {     public static void main(String[] args) {          double firstnum, secondnum, answer1, answer2, answer3, answer4, answer5, answer6;          String text;         int loop = 0;          Scanner input = new Scanner (System.in);          while (loop == 0) {          System.out.println("Enter your first number: ");           firstnum = input. nextDouble();          System.out.println("Please enter the operation you would like to execute: ");         text = input.next();           System.out.println("Enter your second number: ");         secondnum = input.nextDouble();           answer1= firstnum+secondnum;         answer2= firstnum-secondnum;         answer3= firstnum*secondnum;         answer4= firstnum/secondnum;         answer5= (100*(firstnum/secondnum));         answer6= Math.pow(firstnum,secondnum);          switch (text) {          case "+" :             System.out.println(answer1);             break;           case "-" :               System.out.println(answer2);             break;           case "*" :              System.out.println(answer3);             break;           case "x" :              System.out.println(answer3);             break;           case "/" :               System.out.println(answer4);             break;           case "%" :               System.out.println(answer5);             break;           case "^" :               System.out.println(answer6);             break;           default :              System.out.println("Your operation was not recongized.");              }         }     } }   ``
Original en ingles

I am a beginner in Java programming, and I created a calculator as my first Java project. Therefore, can you review my code and provide feedbacks/ tips?

``import java.util.Scanner;  public class Calculator {     public static void main(String[] args) {          double firstnum, secondnum, answer1, answer2, answer3, answer4, answer5, answer6;          String text;         int loop = 0;          Scanner input = new Scanner (System.in);          while (loop == 0) {          System.out.println("Enter your first number: ");           firstnum = input. nextDouble();          System.out.println("Please enter the operation you would like to execute: ");         text = input.next();           System.out.println("Enter your second number: ");         secondnum = input.nextDouble();           answer1= firstnum+secondnum;         answer2= firstnum-secondnum;         answer3= firstnum*secondnum;         answer4= firstnum/secondnum;         answer5= (100*(firstnum/secondnum));         answer6= Math.pow(firstnum,secondnum);          switch (text) {          case "+" :             System.out.println(answer1);             break;           case "-" :               System.out.println(answer2);             break;           case "*" :              System.out.println(answer3);             break;           case "x" :              System.out.println(answer3);             break;           case "/" :               System.out.println(answer4);             break;           case "%" :               System.out.println(answer5);             break;           case "^" :               System.out.println(answer6);             break;           default :              System.out.println("Your operation was not recongized.");              }         }     } } ``

## Lista de respuestas

4

¡Estoy aprendiendo a Java también!

Mirando esto Lo único que podría sugerir es que solo usted hace los cálculos que necesita. Luego, podría eliminar todas las variables de respuesta e imprimir el resultado de los cálculos directamente, ahorrando tiempo y memoria, aunque no mucho.

En términos de presentación, personalmente usaría la caja inferior para nombrar variables, por ejemplo. Firstnum, y también indentaría todos los casos, ya que están dentro del bloque de conmutación. Finalmente, para ` private static final double QUANTITY_DISCOUNT_PERCENT = 5.0; private static final double QUANTITY_DISCOUNT_FACTOR = 0.01 * (100.0 - QUANTITY_DISCOUNT_PERCENT); ... return itemPrice * quantity * QUANTITY_DISCOUNT_FACTOR; 2 Me aseguraría de que no hubiera espacio allí. `

A pesar de lo que digo por la presentación, esa parte de ella depende totalmente de usted, ¡así lo hace lo que prefieras, siempre que se vea claro!

I'm learning Java too!

Looking at this the only thing I might suggest is that you only do the calculations that you need to. You could then remove all answer variables and print the result of the calculations directly, saving time and memory, albeit not much.

In terms of presentation, I personally would use lowerCamelCase for variable naming, e.g. firstNum, and I would also indent all of the cases as they are within the switch block. Finally, for `input. nextDouble();` I'd make sure there was no space there.

Despite what I say for the presentation, that part of it is totally up to you, so do what you prefer, as long as it looks clear!

4

• Fije su sangría dentro del bucle ` while ` switch .
• Puede usar un ` 9988776665544332 para finalizar el bucle, o al menos hacer loop3 a boolean en su lugar. `
• En lugar de tener variables separadas answer5 , puede crear una ` ArrayList ` de ellos:

` ` ArrayList<double> answers = new ArrayList<>(6);   ``

No solo puede evitar la desordenador del código con más de las mismas variables (si se agregará más de ellas), pero puede aprovechar las características de ` 9988776655544338 `.

• Trate de poner más de esto en métodos separados. ` main() ` debe hacer lo menos posible.

• Fix your indentation within the `while` loop and the `switch`.
• You could just use a `break` to end the loop, or at least make `loop` a `boolean` instead.
• Instead of having separate `answer` variables, you can just create an `ArrayList` of them:

``ArrayList<double> answers = new ArrayList<>(6); ``

Not only can you avoid cluttering up the code with more of the same variables (if more of them will be added), but you can take advantage of `ArrayList`'s features.

• Try to put more of this into separate methods. `main()` should do as little as possible.

1

1. ¿Por qué estás informando todas las operaciones cuando solo se requiere uno?
2. DURANTE LA OPERACIÓN DE LA DIVISIÓN COMPROBACIÓN DE DIVIDUALIZADA POR CERO?
3. doble es un tipo de datos lo suficientemente grande. ¿Puede desbordarse especialmente durante la multiplicación?
4. ¿Qué sucede si el usuario entra en una cadena en lugar de números?
5. Puede romperlo en pequeñas funciones y devolver los resultados.

calculadora de clase { PUBLICA ESTÁTICO ANTICO PRINCIPAL (STRING [] ARGS) {

` ` switch0 ` `

}

1. Why are you computing all the operations when only one is required?
2. During division operation check for divide by zero?
3. Double is a big enough data type. Can it overflow especially during multiplication?
4. What happens if user enters a string instead of numbers?
5. You can break it into small functions and return the results.

class Calculator { public static void main(String[] args) {

``    double firstnum, secondnum, answer1, answer2, answer3, answer4, answer5, answer6;     String text;     int loop = 0;      Scanner input = new Scanner(System.in);      while (loop == 0) {          System.out.println("Enter your first number: ");         if (input.hasNextDouble()) {             firstnum = input.nextDouble();         } else {             // error or retry         }          System.out.println("Please enter the operation you would like to execute: ");         text = input.next();          System.out.println("Enter your second number: ");         if (input.hasNextDouble()) {             secondnum = input.nextDouble();         } else {             // error or retry for input         }          answer1 = firstnum + secondnum;         answer2 = firstnum - secondnum;         answer3 = firstnum * secondnum;         answer6 = Math.pow(firstnum, secondnum);         // before division check if secondnum != 0         if (secondnum == 0) {             // exception or some handling mechanism         }         answer4 = firstnum / secondnum;         answer5 = (100 * (firstnum / secondnum));          switch (text) {          case "+":                System.out.println(answer1);             break;         case "-":             System.out.println(answer2);             break;          case "*":             System.out.println(answer3);             break;         case "x":             System.out.println(answer3);             break;          case "/":             System.out.println(answer4);             break;          case "%":             System.out.println(answer5);             break;          case "^":             System.out.println(answer6);             break;          default:             System.out.println("Your operation was not recongized.");          }     } } ``

}

1

Además de lo que todos los demás ya han dicho (comprobación de tipo, verificación de desbordamiento, nombramiento, sangría, etc.), si no le importa calcular los resultados, incluso cuando no los necesita, puede saltarse fácilmente el conjunto ` switch1 ` Bloqueo con un ` switch2 `:

` ` switch3 ` `

In addition to what everyone else has already said (type checking, overflow checking, naming, indenting, etc.), if you don't mind calculating results even when you don't need them, you could easily skip the whole `switch` block with a `Map`:

``    System.out.println("Enter your first number: ");       firstnum = input. nextDouble();      System.out.println("Please enter the operation you would like to execute: ");     String operation = input.next();       System.out.println("Enter your second number: ");     secondnum = input.nextDouble();       Map<String, Double> results = new HashMap<>();     results.put("+", firstnum + secondnum);     results.put("-", firstnum - secondnum);     results.put("*", firstnum * secondnum);     results.put("x", firstnum * secondnum);     results.put("/", firstnum / secondnum);     results.put("%", 100*(firstnum + secondnum));     results.put("^", Math.pow(firstnum, secondnum));      if (results.get(operation) == null) {         System.out.println("Your operation was not recongized.");     } else {         System.out.println(results.get(operation).toString());     } ``

0

¿Por qué no realiza cálculos solo cuando sea necesario? Esto ahorraría la asignación de espacio. Puedes hacer algo como esto:

` ` switch4  ``

Why don't you perform calculations only when needed? This would save space allocation. You can do something like this:

``    import java.util.Scanner;  public class Calculator {   public static void main(String[] args) {      double firstnum, secondnum, answer;      String text;     int loop = 0;      Scanner input = new Scanner (System.in);      while (loop == 0) {      System.out.println("Enter your first number: ");       firstnum = input. nextDouble();      System.out.println("Please enter the operation you would like to execute: ");     text = input.next();       System.out.println("Enter your second number: ");     secondnum = input.nextDouble();        switch (text) {      case "+" :         answer = firstnum+secondnum;         System.out.println(answer);         break;       case "-" :         answer = firstnum-secondnum;                 System.out.println(answer);         break;       case "*" :         answer = firstnum*secondnum;         System.out.println(answer);         break;       case "/" :          answer = firstnum/secondnum);          System.out.println(answer);         break;       case "%" :           answer = (100*(firstnum/secondnum));         System.out.println(answer);         break;       case "^" :           answer = Math.pow(firstnum,secondnum);         System.out.println(answer);         break;       default :          System.out.println("Your operation was not recongized.");          }     } } } ``

0

en lugar de esto:

` ` switch5  ``

Puedes escribir esto:

` ` switch6 ` `

en lugar de esto:

` ` switch7  ``

La variable no debe llamarse ` switch8 , pero 99887776655443319 . `

Podría extraer el cálculo en un método separado:

` ` break0  ``

y luego usalo así:

` ` break1 ` `

``int loop = 0; while (loop == 0) {     // Some code } ``

you can write this:

``while (true) {     // Some code } ``

``System.out.println("Please enter the operation you would like to execute: "); text = input.next(); ``

the variable should not be called `text`, but `operator`.

You could extract the calculation into a separate method:

``static double calculate(double firstnum, String operator, double secondnum) {     switch (operator) {     case "+":   // Note how you can combine multiple cases.     case "plus":         return firstnum + secondnum;     case "-":     case "minus":         return firstnum - secondnum;     // xe2x80xa6 and so on xe2x80xa6     default:         throw new IllegalArgumentException("Unknown operator: " + operator);     } } ``

and then use it like this:

``try {     double answer = calculate(firstnum, text, secondnum);     System.out.println(answer); } catch (IllegalArgumentException e) {     System.out.println(e.getMessage()); } ``

He escrito este código para una calculadora de dos entradas. ¿Hay algo que pueda hacer para que este código sea más eficiente? import javax.swing.*; impor...

6  Calculadora simple en C #  ( Simple calculator in c )
Es una calculadora básica donde el usuario ingresa a dos números, y una operación y el programa lo convierten en una ecuación y obtiene la respuesta. Por ejem...

2  Una calculadora básica en C que utiliza un bucle  ( A basic calculator in c that uses a loop )
He creado un programa que forma una calculadora básica en C que incluye las operaciones básicas como la adición, la resta, la multiplicación y la división. Pe...

6  Calculadoras para ecuaciones de la ley de gas  ( Calculators for gas law equations )
He realizado un programa C ++ que calcula una variable faltante en una ecuación para una de las cinco leyes siguientes de gas: la ley de Boyle ley de car...

3  Primer programa de Python: Calculadora básica  ( First python program basic calculator )
Quiero comenzar a aprender Python por diversión y, por lo tanto, podría profundizar en los proyectos de aprendizaje de la máquina más adelante en el futuro ta...

10  Calculadora básica que lleva 2 números y hace una operación con ellos  ( Basic calculator that takes 2 numbers and does an operation with them )
El código funciona perfectamente bien para mí (lo compiló en Bluej y Eclipse), pero me preguntaba qué se consideraban otros programadores más experimentados. ...

4  Calculadora binaria de Python  ( Python binary calculator )
Mi tarea fue construir una calculadora en la adición binaria de soporte de Python, etc. Para comenzar Definir un par de excepciones personalizadas: paper...

0  Calculadora de java simple en columpio  ( Simple java calculator in swing )
¿Puedes revisar este código para mí? ¿Cómo lo hago mejor? //this is the calculator import java.awt.*; import java.awt.event.*; import javax.swing.*; import...

6  Calculadora aritmética básica  ( Basic arithmetic calculator )
La calculadora admite los operadores básicos (agregar, sustancia, dividir, multiplicar). en este momento, solo funciona con enteros positivos No valido...

5  Calculadora de área y volumen  ( Area and volume calculator )
Soy un codificador para principiantes, haciéndolo únicamente por diversión, habiendo comenzado a codificar hace unos dos meses con Python. Tengo un punto de t...