2017-01-23 2 views
-1

Dieses Programm soll die Stunden dauern, um ein Telefon von einem Benutzer aufzuladen und die Zeit nehmen, die der Benutzer ihr Telefon laden möchte (Index 0-23), und die Kosten abhängig zurückbringt Auf was RateTable sagt. Das Problem, das ich habe, ist mit der getChargeStartTime-Methode, die die Anzahl der Stunden dauert, die der Benutzer ihr Telefon aufladen möchte und die beste Zeit findet, um für die niedrigsten Kosten aufzuladen. Ich war in der Lage, jede Methode einzeln zu bearbeiten, aber es erwies sich als eine Herausforderung, sie in Einklang zu bringen.Benötigen Sie Hilfe, die Methoden zusammen arbeiten

Hier ist ein Beispiel, was das Programm tun soll (unter Verwendung der Werte von rateTable unten): Benutzereingaben, die ihr Telefon für 3 Stunden ab Index 4 laden möchten. GetCharging Kosten würden dann gehen um 4 zu indizieren und die nächsten 3 Werte zu addieren, wobei 88 zurückgegeben wird. Die Methode getChargeStartTime würde dann die Anzahl der Stunden nehmen und das Array selbst durchlaufen, um die günstigste Ladezeit zu finden. So in diesem Beispiel wäre es schließlich 21-23 finden Index, 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)' ... Sie haben 'startHour' oder' chargeTime' nicht zugewiesen ...? –

Antwort

0

Im Code gibt, wie Sie geschrieben haben, ist cost < minCost falsch. Sie möchten max cost dort festlegen und dann durchlaufen, damit der Wert als niedrigste Kosten endet.

0

Sie benötigen hier keine Parameter. Sie ordnen die Werte startHour und chargeTime innerhalb der Methode zu, ignorieren daher die von Ihnen übergebenen Werte.

Versuchen Sie es stattdessen.

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); 

    ... 
} 

Und den Rückgabewert dieser Methode verwenden, wahrscheinlich

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

Lesen Sie auch auf das, was "variable scope" Mittel auf.

chargeTime, und bestStartHour kann nicht von der Hauptmethode zugegriffen werden.