2010-10-29 13 views
0

J'essaie de vérifier si une pompe à essence est libre & & remplie de gaz, puis j'essaie de faire en sorte que la pompe à utiliser par les voitures dans une file d'attente.Pourquoi mon instruction if ne fonctionne-t-elle pas?

Thread carThreads[]=new Thread[TOTAL_CARS]; 
    try { 
    Pump pump1 = new Pump(); 
    pump1.setName("pump1"); 
    pump1.setFuelAmount(2000); 
    pump1.setState(0); 

    Pump pump2 = new Pump(); 
    pump2.setName("pump2"); 
    pump2.setFuelAmount(2500); 
    pump2.setState(0); 

    Pump chosenPump = new Pump(); 

    if(pump1.getState()==0 && pump1.getFuelAmount()<0){ 
     chosenPump = pump1; 
     System.out.println("Pump1 is free and has a fuel amount of: " 
     + (pump1.getFuelAmount())); 
    } 

    else if (pump2.getState()==0 && pump2.getFuelAmount()<0){ 
     chosenPump = pump2; 
     System.out.println("Pump2 is free and has a fuel amount of: " 
     + (pump2.getFuelAmount())); 
    } 
    //else{ 
    // System.out.println("Must wait for the tanker. It should be here soon"); 
    //} 

    Random r = new Random(); 

    Car car; 

    for(int i = 0; i<TOTAL_CARS; i++){ 
     car = new Car(i, chosenPump); 
     System.out.println("car" + car.getID() + " was created"); 

     (carThreads[i] = new Thread(car)).start(); 
     Thread.currentThread().sleep(r.nextInt(10000)); 

     line.enqueue(car); 

     chosenPump.usePump((Car)line.getfirst(), chosenPump, line); 

     System.out.println("this is the new line size for gas: " + line.size()); 
    }//end for 
    }//end try 
    catch (Exception e){ 
    } 
}//end of main 
+2

Quelle instruction if ne fonctionne pas? Y a-t-il des erreurs? Nous avons besoin de plus de détails. –

Répondre

13

Vous regardez pump1.getFuelAmount()<0

Ceci vérifiera si la pompe a une quantité de carburant négative. Si vous voulez voir si elle a un montant positif de carburant, vous devez faire pump1.getFuelAmount()>0 et pump2.getFuelAmount()>0

+0

oh mon Dieu merci !!!!!!!!!!!! – Luron

6

Peut-être que vous voulez

if(pump1.getState() == 0 && pump1.getFuelAmount() > 0) { 

au lieu de

if(pump1.getState() == 0 && pump1.getFuelAmount() < 0) { 

(vous avez mêlé > et <)

-1

changement pump1.getFuelAmount() < 0 à pump1.getFuelAmount()> 0 même pour Pompe2

+1

Pourquoi publier votre propre réponse de quelque chose que quelqu'un a déjà posté? –

3

Rewrite votre déclaration if() comme ceci:

if(pump1.getState() == 0 && pump1.getFuelAmount() > 0) { 
    chosenPump = pump1; 
    System.out.println("Pump1 is free and has a fuel amount of: " 
     + (pump1.getFuelAmount())); 
} else if(pump2.getState() == 0 && pump2.getFuelAmount() > 0) { 
    chosenPump = pump2; 
    System.out.println("Pump2 is free and has a fuel amount of: " 
     + (pump2.getFuelAmount())); 
} 

vous pouvez également inclure un catchall else à la fin afin que vous puissiez gérer si aucune pompe est disponible ou si ni a carburant.

0

Quelques commentaires:

D'abord, pompe1 et Pompe2. Un ensemble de pompes ne réduirait-il pas la quantité de code? (Vous pouvez simplement utiliser des boucles pour vérifier toutes vos pompes pour n'importe quoi)

Sur votre déclaration if: En théorie, vous ne pouvez pas avoir une quantité de carburant négative, tout ce que vous voulez faire est de voir si vous avez plus de 0. (Si vous avez moins de 0, vous ne pouvez plus donner de carburant de toute façon, donc peu importe à quel point il est inférieur à 0)