我的程序根据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);
}
答案 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;
}