在以下程序中,用户输入a
他们工作的小时数,以及b
他们的小时费率,然后计算他们的工资。
当a
和b
都是int
类型时,它正常工作,然后我意识到我的老师要求b
成为双倍。
我尝试将b
的所有内容从int
更改为double
,但现在又返回错误。
我做错了什么?
import java.util.Scanner;
public class Project61 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("Enter the amount of hours first and then the hourly rate");
int a=in.nextInt();
double b=in.nextDouble();
double res = mult (a, b);
System.out.println("Hours : "+ a);
System.out.println("Rate per hour : "+ "$"+ b);
System.out.println("Pay : "+ "$" +res);
}
public static double mult(int a, double b) {
if(b ==1){
return a;
}
if (b<1) {
return -a + mult(a, b+1);
}
else{
return a + mult(a, b-1);
}
}
}
答案 0 :(得分:0)
问题在于,如果b
不等于整数(例如,如果b == 2.5
),则从不通过重复从中减去1来获得1 。因此,您的递归函数将使用b == 1.5
,然后使用b == 0.5
调用自身,然后再调用b == 1.5
,无限广告(或者至少是adumumumumumumumumumumumumumumumumumum)。您需要创建一个可以保证最终会触发的退出案例。
答案 1 :(得分:-1)
您必须将int a转换为double。你不能乘以整数加倍。你可以在输入后或在
中将int a转换为doublemethod public static double mult(int a, double b)
{
double aa = a.doubleValue();
if(b ==1)
{
return a;
}
if (b<1)
{
return -aa + mult(aa, b+1);
}
else
{
return aa + mult(aa, b-1);
}
}