2015-12-26 3 views
-2

Не будьте критичным, потому что это моя первая в мире рабочая программа Я хочу знать, насколько она хороша и как я могу сделать это более эффективным как в производительности, так и в памяти.Как я могу сделать этот код java более эффективным

вот мой код:

package leren; 
import java.util.Scanner; 

public class Calculator3 { 

static boolean again =true; 
static Scanner keyIn = new Scanner(System.in); 
public static void main(String args[]){ 

     double in1, in2; 
     char operator; 

    while(again = true){ 
    System.out.println("Type your first number:"); 
    in1 = keyIn.nextDouble(); 
    System.out.println("Type your second number:"); 
    in2 = keyIn.nextDouble(); 
    System.out.println("Type your operator"); 
    operator = keyIn.next().charAt(0); 

     switch(operator){ 
     case '+': 
      System.out.println("your result is:"+(in1 + in2)); 
      Timer(); 
      again(); 
      break; 

     case '-': 
      System.out.println("your result is:"+(in1 - in2)); 
      Timer(); 
      again(); 
      break; 

     case '/': 
      System.out.println("your result is:"+(in1/in2)); 
      Timer(); 
      again(); 
      break; 

     case '*': 
      System.out.println("your result is:"+(in1 * in2)); 
      Timer(); 
      again(); 
      break; 

     } 
    } 
} 
public static void Timer(){ 
    try{ 
     Thread.sleep(1500); 
    } 
    catch(Exception e){ 
    } 
} 
public static void again(){ 

    char YoN; 
    System.out.println("do you wanna do this again?[Y | N]"); 
    YoN = keyIn.next().charAt(0); 
    switch(YoN){ 
    case 'Y': 
     String[] args = {}; 
     Calculator3.main(args); 
     break; 
    case 'N': 
     System.out.println("well get out of here"); 
     Timer(); 
     System.exit(0); 
     } 
    } 
} 

Любая помощь поможет мне понять вещи лучше.

+5

Не ваш избиратель, но вы можете размещать его на другом сайте, так как это может быть лучше опубликовано в обзоре кода. Независимо от того, вам нужно быть более конкретным, что вы подразумеваете под «эффективным», я думаю. –

+1

Вы не используете никакие петли или структуры данных, поэтому эффективность в этом случае не актуальна ... – TDG

ответ

2

Эта версия не эффективна с точки зрения памяти и не быстрее.

Эта версия легче читать и понимать, включая себя через несколько месяцев.

Я поместил большую часть кода в ваш класс. Я избавился от статических методов, кроме основного. Я разбил ваш код на методы. Я также исправил ваше заявление while, поэтому вам не нужно запускать приложение снова и снова.

Вот код.

package com.ggl.testing; 

import java.util.Scanner; 

public class Calculator3 implements Runnable { 

    private boolean again = true; 
    private Scanner keyIn = new Scanner(System.in); 

    public static void main(String args[]) { 
     new Calculator3().run(); 
    } 

    @Override 
    public void run() { 
     while (again) { 
      double in1 = readDouble("Type your first number: "); 
      double in2 = readDouble("Type your second number: "); 
      char operator = readChar("Type your operator: "); 
      System.out.println("Your result is: " 
        + operation(in1, in2, operator)); 
      timer(); 
      char yOrN = readChar("Do you want to do this again? [Y | N] "); 
      if (Character.toLowerCase(yOrN) != 'y') { 
       System.out.println("Well, get out of here"); 
       again = false; 
      } 
     } 

     keyIn.close(); 
    } 

    public double readDouble(String s) { 
     System.out.print(s); 
     return keyIn.nextDouble(); 
    } 

    public char readChar(String s) { 
     System.out.print(s); 
     return keyIn.next().charAt(0); 
    } 

    public double operation(double in1, double in2, char operator) { 
     switch (operator) { 
     case '+': 
      return in1 + in2; 
     case '-': 
      return in1 - in2; 
     case '/': 
      return in1/in2; 
     case '*': 
      return in1 * in2; 
     default: 
      return 0D; 
     } 
    } 

    public void timer() { 
     try { 
      Thread.sleep(1500); 
     } catch (InterruptedException e) { 

     } 
    } 

} 
+0

Большое спасибо, что я могу использовать и учиться. Можете ли вы объяснить небольшие кусочки, потому что я ноб только начал кодировать Java (14 лет). Что-то, что мне кажется трудным, это: вернуть материал и сохранить мой код в порядке, можете ли вы помочь мне в этом. – Youri

+0

@Youri: вы ничего не можете вернуть (void) или почти что угодно (char, int, double, String, String array, Object, Object array и т. Д.). В вашей программе мы имеем дело с символьными и двойными полями. Независимо от того, что вы говорите, вы собираетесь вернуться (дважды), вы должны вернуться (дважды). Хорошим примером этого является метод работы. –

+0

@Youri: Я использую [Eclipse] (https://eclipse.org/) для кодирования и форматирования моей Java. Использование интегрированной среды разработки (IDE) помогает сосредоточиться на коде, а не на обслуживании, например, на форматировании. –

Смежные вопросы