2017-01-23 3 views
-1

このプログラムは、ユーザーから電話を充電し、ユーザーが自分の電話(インデックス0-23)を請求したい時間がかかるようにして、どんなレートでテーブルが言っている。私が抱えている問題は、ユーザーが電話を充電したい時間数を必要とするgetChargeStartTimeメソッドであり、最も低いコストで充電を開始するのに最適な時間を見つけます。私は、すべての方法を個別に扱うことができましたが、一貫して働かせるための課題であることが証明されています。助けが必要な方法を作る

Heresここでは、以下のrateTableの値を使用します。 ユーザーは、インデックス4から3時間かけて電話を充電したいと思っています。 4を索引付けして次の3つの値を加算して88を返します。次に、getChargeStartTimeメソッドは時間をかけて、最も安い充電時間を見つけるために配列をループします。この例では、それは最終的にあなたが書いたようなコードでは40

private int[] rateTable = 
    {5,10,26,35,23,30,35,40,45,66,58,50,75, 
     65,30,55,44,45,32,25,31,15,10,15}; 

private int getChargingCost(int startHour, int chargeTime){ 
    int usercost = 0; 
    String start = JOptionPane.showInputDialog(
      "At what hour do you want to start charging your phone? (0-23)"); 
    startHour = Integer.parseInt(start); 


    String time = JOptionPane.showInputDialog(
      "How many hours do you want to charge your phone?"); 
    chargeTime = Integer.parseInt(time); 


    for (int hour = 0; hour < chargeTime; hour++){ 
     usercost += rateTable[(startHour + hour) % 24]; 
    } 
    return usercost; 

} 

public int getChargeStartTime(int chargeTime) { 
    int bestStartHour = 0; 
    int minCost = getChargingCost(0, chargeTime); 
    for(int hour = 1 ; hour <24 ; hour++){ 
     int cost = getChargingCost(hour, chargeTime); 
     if(cost < minCost){ 
      bestStartHour = hour; 
      minCost = cost; 
     } 
      return bestStartHour; 
    } 
return chargeTime; 
    } 

public static void main(String[] args){ 
    BatteryCharger obj = new BatteryCharger(); 
    obj.getChargingCost(startHour, chargeTime); 

    JOptionPane.showMessageDialog(null, 
      "Charging your phone for " + chargeTime + 
      " hours will cost $" + usercost + ", but if you start at hour " + bestStartHour + " it will only cost you " + cost); 

      } 
     } 
+0

'obj.getChargingCost(startHour、chargeTime)' ...あなたは 'startHour'または' chargeTime'を割り当てていません...? –

答えて

0

を返すインデックス21-23を見つけるだろうだからcost < minCostは間違っています。 max costを設定してループスルーして、値が最も低いコストとして終了するようにします。

0

ここではパラメータは必要ありません。メソッド内でstartHourchargeTimeの値を代入すると、渡された値は無視されます。

代わりにこの値を試してください。

private int getChargingCost(){ 

    String start = JOptionPane.showInputDialog(
      "At what hour do you want to start charging your phone? (0-23)"); 
    int startHour = Integer.parseInt(start); 


    String time = JOptionPane.showInputDialog(
      "How many hours do you want to charge your phone?"); 
    int chargeTime = Integer.parseInt(time); 

    ... 
} 

そして、そのメソッドの戻り値を使用し、おそらく

BatteryCharger obj = new BatteryCharger(); 
int cost = obj.getChargingCost(); 

または、「変数のスコープ」は何を意味するのかをよく読んで。

chargeTime,usercostおよびbestStartHourには、メインメソッドからアクセスできません。

JOptionPane.showMessageDialog(null, 
     "Charging your phone for " + chargeTime + 
     " hours will cost $" + usercost + ", but if you start at hour " + bestStartHour + " it will only cost you " + cost); 

     } 
関連する問題