簡體   English   中英

在遞歸方法中將 int 和 double 相乘

[英]multiplying int and double in recursive method

在下面的程序中,用戶輸入a表示他們工作了多少小時,輸入b表示他們的小時費率,然后計算他們的工資。

ab都是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);
      }
   }


}

問題是,如果b不等於一個整數(例如,如果b == 2.5 ),你將永遠不會通過重復減去 1 得到 1。 因此,您的遞歸函數將使用b == 1.5調用自身,然后使用b == 0.5 ,然后再次使用b == 1.5 ,無限期(或至少, ad untilum Javaum runsum outum ofum 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);
      }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM