我怎样才能提高效率呢?

时间:2015-09-26 00:17:18

标签: java performance iteration

我的程序根据Integer输入的比较给出一个String答案。有没有更有效的方法来做这个而不是分别提示用户3次并且分别调用numberVerify三次?我该怎么做? Java的新手。

public static void main(String[] args) {
    // TODO code application logic here
    // declare variables
    int number=0;
    System.out.println("Enter the first integer: ");
    int number1 = numberVerify(number);
    System.out.println("Enter the second integer: ");
    int number2 = numberVerify(number);
    System.out.println("Enter the third integer: ");
    int number3 = numberVerify(number);
    String compare = comparison(number1, number2, number3);
    printer(compare);
}
public static int numberVerify(int number){
    Scanner in = new Scanner(System.in);
     if(in.hasNextInt()){
        number = in.nextInt();
    }

    else{

        System.out.println("Error! Input must be an integer!");   

        System.out.println("");

        return numberVerify(number);

    }
    return number;
}

public static String comparison(int number1, int number2, int number3){
    String answer;
    if(number1 == number2 && number1 == number3)
    {       
        answer = "all the same";
    }
    else if(number1 != number2 && number1 != number3)
    {       
        answer = "all different";
    }
    else
    {       
        answer = "neither";
    }
    return answer;
}

public static void printer(String answer){
    System.out.println(answer);
}

5 个答案:

答案 0 :(得分:3)

效率与此无关。

用户将使用SECONDS输入号码。操作系统可以使用MILLISECONDS进行键盘事件处理,屏幕重绘等。您的Java应用程序将采用MICROSECONDS或更少的时间来做决策。您为减少微秒组件而花费的任何努力都是浪费精力。

如果这里有待解决的问题(我不是说有),他们会:

  • 使用户界面易于使用。

  • 编写代码,以便易于阅读和维护。

  • 将代码写成"优雅" ... 必然与前一个相同。

更新 - 显然,您实际上对简化和/或缩小代码大小感兴趣。

首先,这并不是大多数人所说的效率。 (事实上​​,我认为花时间改进足够好的代码是低效利用你的时间。)

其次,简单性和代码大小不一样。大多数人(程序员)会说简单的代码是易于理解的代码......对于普通程序员来说。通常,对问题的更简洁的解决方案实际上很难理解。 (以@ rby的代码为例。如果你需要确定它是正确的而不进行测试,你需要仔细阅读。)

最后,专业软件工程师遵循一般原则,即代码必须足够好用于目的" 1 ...但不是更好。 Perfect is the enemy of good。花时间制作一个比你需要的更好的节目是浪费你的时间,并且可能会花费你/你的客户/雇主的钱。

1 - 目的可能包括性能标准,可读性/可维护性,通用性/可恢复性以及各种特定的正确性标准。但事实并非如此。通常,代码是针对上下文编写的,其中许多标准无关紧要或甚至适得其反。但我离题了......

答案 1 :(得分:1)

使用int数组和for循环代替:

int [] values = new int[3];
for(int i =0; i<3; i++){
  values[i] = in.nextInt();
}

然后修改比较方法以使用数组;

对于布朗尼点查找设置并计算如何消除大部分比较方法。

答案 2 :(得分:1)

您可以使用以下单行替换方法比较中的整个if块并返回答案:

answer =  ( (n1 == n2) ? 
            ( (n2 == n3) ? "all equal" : "neither") : 
                ( n1 == n3) ? "neither" : ( ( n2 == n3 ) ? "neither" : "all different" ) ); 
return answer;

答案 3 :(得分:0)

您可以使用数组和其他一些修改来提高效率。

这是代码。

import java.util.Scanner;

公共课高效{

private static String comparison(int[] numberArray) {
    String answer;
    if(numberArray[0] == numberArray[1] && numberArray[1] == numberArray[2]){
        answer = "all the same";
    }else if(numberArray[0] != numberArray[1] && numberArray[1] != numberArray[2]){
        answer = "all different";
    }else{
        answer = "neither";
    } return answer;

}

public static void main(String[] args) {

    int[] numberArray = new int[3];
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the numbers");
    for(int i=0;i<=numberArray.length-1;i++){
        if(scan.hasNextInt()){
            numberArray[i]=scan.nextInt();
        }else{
            System.out.println("Error! Input must be an integer!");   
        }
    }       
    String compare = comparison(numberArray);
    System.out.println(compare);


}

}

答案 4 :(得分:0)

我不知道更高效或可读,似乎已经这样了。但我可以缩短它。

public static void main(String[] args) {
    // TODO code application logic here
    // declare variables
    Scanner in = new Scanner(System.in);
    int[] numbers = new int[3];
    String[] labels = {"first","second","third"};
    for(int i=0; i<3; i++)
    {
        System.out.print("Enter the " + labels[i] + " integer: ");
        numbers[i] = in.nextInt();
    }
    System.out.println(comparison(numbers[0],numbers[1],numbers[2]));
}

public static String comparison(int number1, int number2, int number3){
    String answer;
    if(number1 == number2 && number1 == number3)
    {       
        answer = "all the same";
    }
    else if(number1 != number2 && number1 != number3 && number2 != number3)
    {       
        answer = "all different";
    }
    else
    {       
        answer = "neither";
    }
    return answer;
}