2016-11-29 20 views
0

ではなく、ちょうど76セントで私に4枚のコインを与えるのは、そのような四半期= 3、小銭= 1として、個々のコインを印刷する方法を考え出す助けが必要です。私は4カウンターを設定しようとしましたが、それはちょうど繰り返し硬貨の名前を印刷し、答えは間違っていました。再帰コインの変更

import java.util.Scanner; 
public class Money 
{ 
    public static void main(String args[]) 
    { 
     int[] coins = { 1, 5, 10, 25}; 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter Change (In Cents): "); 
     int sum = scan.nextInt(); 
     int counter1 = 0; 
     int counter2 = 0; 
     int counter3 = 0; 
     int counter4 = 0; 
     String quarter = ""; 
     Money minCoin = new Money(); 
     System.out.println(minCoin.findMinCoins(coins, sum, counter1, counter2, counter3, counter4)); 
     System.out.println(counter4); 
    } 

    private int findMinCoins(int[] coins, int sum, int counter1, int counter2, int counter3, int counter4) 
    { 
     if (sum <= 0 || coins.length == 0) 
     { 
      return 0; 
     } 

     for (int i = coins.length - 1; i >= 0; i--) 
     { 
      if(coins[i] == 1 && coins[i] != 5) 
      { 
       counter1++; 
      } 

      if(coins[i] == 5) 
      { 
       counter2++; 
      } 

      if(coins[i] == 10) 
      { 
       counter3++; 
      } 

      if(coins[i] == 25) 
      { 
       counter4++; 
      } 

      if (coins[i] <= sum) 
      { 
       System.out.println("Pennies: " + counter1); 
       System.out.println("Nickels: " + counter2); 
       System.out.println("Dimes: " + counter3); 
       System.out.println("Quarters: " + counter4); 
       return 1 + findMinCoins(coins, sum - coins[i], counter1, counter2, counter3, counter4); 

      } 
     } 
     return 0; 
    } 

} 
+0

、あなたは1 + findMinCoinsを持っている...それは本当に1が表すコインの種類に関する情報を提供していません。代わりに、例えばreturn文、内の変数に1を追加してみてください:findMinCoins(コイン、合計 - コイン[i]は、カウンタ1 + 1、...)あなたが別のペニー –

答えて

0

これを試してみてください:

import java.util.Scanner; 
public class Money 
{ 
public static void main(String[] args) { 

     int[] coins = {1, 5, 10, 25}; 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter Change (In Cents): "); 
     int sum = scan.nextInt(); 
     int counter1 = 0; 
     int counter2 = 0; 
     int counter3 = 0; 
     int counter4 = 0; 
     String quarter = ""; 
     Money minCoin = new Money(); 
     System.out.println(minCoin.findMinCoins(coins, sum, counter1, counter2, counter3, counter4)); 
     System.out.println(counter4); 

    } 

    private int findMinCoins(int[] coins, int sum, int counter1, int counter2, int counter3, int counter4) { 
     if (sum <= 0 || coins.length == 0) { 
      return 0; 
     } 

     for (int i = coins.length - 1; i >= 0; i--) { 

      if (coins[i] == 25 && sum >= coins[i]) { 
       counter4++; 

      } 

      else if (coins[i] == 10 && sum >= coins[i]) { 
       counter3++; 
      } 

      else if (coins[i] == 5 && sum >= coins[i]) { 
       counter2++; 
      } 

      else if (coins[i] == 1 && sum >= coins[i]) { 
       counter1++; 
      } 

      if (coins[i] <= sum) { 
       System.out.println("Pennies: " + counter1); 
       System.out.println("Nickels: " + counter2); 
       System.out.println("Dimes: " + counter3); 
       System.out.println("Quarters: " + counter4); 
       return 1 + findMinCoins(coins, sum - coins[i], counter1, counter2, counter3, counter4); 

      } 
     } 
     return 0; 
    } 
} 
+0

が必要であることを示すためににいくつかの追加情報を追加することを検討してくださいあなたの答えはあなたの変更を説明します。 :) – Gulllie

+0

ここでは、コインの価値と合計の比較を加えました。 – RJMIMI38

0

私はあなたがJavaメソッドに渡された引数がどのように機能するかを誤解している疑いがあります。 'counter'値を渡してからメソッド内で反復し、呼び出しメソッドの値が変更されることを期待しています。それはJavaの仕組みではありません。詳細はhereを参照してください。

あなたは(あなたの中にそれらを印刷しているため)バックメソッドから値を取得するために期待していない場合は、それらの引数作るない点はありません。メソッドのスコープ内のローカル変数にするのがベストです。

あなたが大きいものから小さいため、あなたの変化の計算から配列を返す場合は、それが少し簡単かもしれません。その後、カウンターに個別の変数は必要ありません。次のような

何か:これは切捨てJavaの整数の除算を活用すること

int[] coins = {25, 10, 5, 1}; 
String[] names = {"Quarters", "Dimes", "Nickles", "Pennies"}; 
int[] change = getChange(coins, total); 
for (int i = 0; i < change.length; i++) { 
    System.out.println(names[i] + ":" + change[i]); 
} 

private int[] getChange(int[] coins, int total) { 
    int[] result = new int[coins.length]; 
    for (int i = 0; i < coins.length; i++) { 
     result[i] = total/coins[i]; 
     total -= result[i] * coins[i]; 
    } 
    return result; 
} 

注意。したがって、76セントで始めると3/4(76/25 - > 3)に戻ります。また、ループ内の2番目のステートメントはtotal %= coins[i]であることに注意してください。これは同じ効果がありますが、わかりやすいでしょう。いずれにしても、コードは「現在の金種の価値から総額を取り除く」と言っています。あなたのreturn文で

関連する問題