Java 递归法中的整数与双精度乘法
在下面的程序中,用户输入Java 递归法中的整数与双精度乘法,java,recursion,int,double,Java,Recursion,Int,Double,在下面的程序中,用户输入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
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);
}
}
}
import java.util.Scanner;
公共类项目61{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
System.out.println(“先输入小时数,然后输入小时费率”);
int a=in.nextInt();
双b=in.nextDouble();
双res=多(a,b);
系统输出打印项次(“小时数:+a);
System.out.println(“每小时费率:”+“$”+b);
System.out.println(“支付:”+“$”+res);
}
公共静态双mult(int a,双b){
如果(b==1){
返回a;
}
如果(b问题是,如果b
不等于一个整数(例如,如果b==2.5
),您将永远不会通过重复从中减去1得到1。因此递归函数将使用b==1.5
调用自身,然后使用b==0.5
,然后再次使用b==1.5
,无限次调用(或者至少,直到Javaum runsum outum of um stackum memoryum)。您需要创建一个退出案例,您可以保证最终会被触发。您必须将int a转换为double。您不能将double与integer相乘。您可以在输入后或输入后将int a转换为double
method 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);
}
}
method公共静态双mult(inta,double b)
{
double aa=a.doubleValue();
如果(b==1)
{
返回a;
}
如果(b)它给了你什么错误?线程“main”java.lang.StackOverflowerError中的异常。然后它重复地说错误在第26行和第29行。这是返回-a+mult(a,b+1);并返回a+mult(a,b-1);您很可能希望为情况b>1设置一个条件,因为b现在是一个双精度数,它可能大于非整数。这与他所说的堆栈溢出错误无关,也不正确:如果您试图通过aa
(a双精度
)在未强制转换的情况下,将mult
作为第一个参数a
(anint
),您将得到一个编译器错误。