给定3个int值,a b c,返回它们的总和。但是,如果其中一个值为13,则它不计入总和,其右边的值不计算。因此,例如,如果b为13,则b和c都不计数。
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int a,b,c,s;
System.out.println("Enter 3 values:");
a=scanner.nextInt();
b=scanner.nextInt();
c=scanner.nextInt();
s=luckySum(a,b,c);
}
public static int luckySum(int a,int b,int c){
int s = a + b + c;
if(s<13){
System.out.println(s);
}else if(a==13 && b<=13 && c<=13){
System.out.println("Lucky sum:"+0);
}else if(a<=13 && b==13 && c<=13){
System.out.println("Lucky sum:"+0);
}else if(a<=13 && b<=13 && c==13){
System.out.println("Lucky sum:"+0);
}
else{
// do nothing
}
return s;
}
}
答案 0 :(得分:1)
假设从左到右的意思是{a, b, c}
,那就是为了重构而积极地尖叫:
public static int luckySum (int left, int middle, int right) {
if (left == 13) return 0;
if (middle == 13) return left;
if (right == 13) return left + middle;
return left + middle + right;
}
以下是我所做的更改。
- 删除if/else-if/else
代码的意大利面条状混合物。
- 使用体面的变量名称。
- 通过使用多个返回来最小化代码垂直空间以提高可读性。
不要让任何人告诉你最后一点是个坏主意。如果他们这样做,他们就不会理解为什么。多个返回点只有在它们更难以计算出程序流时才会变坏。在像这样的四行函数中,零有机会一眼就看不到所有控制流。
答案 1 :(得分:0)
如果b为13且其他值为非零且总和大于13,或者如果其他两个为零则变为13。
int s = a + b + c;
if(s<13)
这种情况阻止您继续,因为您正在进一步使用else if
语句。
使用if(s<=13)
可以解决您的问题。
答案 2 :(得分:0)
如果我已正确理解您的问题,您需要一个代码,如果输入的数字中的任何数字是13,而不应该总和,否则它应该正常工作。请尝试以下代码:
public static void main(String args[])
{
Scanner scanner=new Scanner(System.in);
int a,b,c,s;
System.out.println("Enter 3 values:");
a=scanner.nextInt();
b=scanner.nextInt();
c=scanner.nextInt();
if(a==13 || b==13 || c==13) //if any a , b , c is 13 , your sum function called //
{
System.out.println("one of value was 13,so no output");
}
else //else call sum function and get your result value
{
s=luckySum(a,b,c);
System.out.println("output is"+s);
}
}
public static int luckySum(int a,int b,int c)
{
int s = a + b + c;
return s;
}