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
(an
int
),您将得到一个编译器错误。