2016-04-01 10 views
0

Alle anderen Probleme behoben. Derzeit versucht, 10% von currentPowerLevel in der Funktion fightCrime abzuziehen. Ohne eine lokale Variable muss ich jedoch mit einer vom Benutzer eingegebenen Nummer umgehen und 10% davon abziehen. Das Problem ist, dass ich normalerweise eine lokale Variable mit einer festgelegten Nummer hätte, die ich einfach wieder aufsuchen und die Zahl multiplizieren könnte, die mit .1.Abziehen eines Prozentsatzes von einem Getter und Anzeigen der Gesamtsumme

package superherodriver; 

/** 
* 
* @author Daniel 
*/ 
public class SuperHero 
{ 
    private String name; 
    private String superPower; 
    private boolean canFly; 
    private int crimesStopped; 
    private final double MAX_POWER_LEVEL; 
    private double currentPowerLevel; 

    public SuperHero() 
    { 
     MAX_POWER_LEVEL = 100; 
     name = ""; 
     superPower = ""; 
     canFly = false; 
     crimesStopped = 0; 
     currentPowerLevel = 0; 

    } 

    //Define non-default constructor 
    public SuperHero(String aName, String aSuperPower, double aMaxPowerLevel, boolean aCanFly) 
    { 
     MAX_POWER_LEVEL = aMaxPowerLevel; 
     this.name = aName; 
     this.superPower = aSuperPower; 
     this.canFly = aCanFly; 
     this.crimesStopped = 0; 
     this.currentPowerLevel = MAX_POWER_LEVEL; 
    } 

    //Define getters and setters 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSuperPower() { 
     return superPower; 
    } 

    public void setSuperPower(String superPower) { 
     this.superPower = superPower; 
    } 

    public boolean isCanFly() { 
     return canFly; 
    } 

    public void setCanFly(boolean canFly) { 
     this.canFly = canFly; 
    } 

    public int getCrimesStopped() { 
     return crimesStopped; 
    } 

    public void setCrimesStopped(int crimesStopped) { 
     this.crimesStopped = crimesStopped; 
    } 

    public double getCurrentPowerLevel() { 
     return currentPowerLevel; 
    } 

    public void setCurrentPowerLevel(double currentPowerLevel) { 
     this.currentPowerLevel = currentPowerLevel; 
    } 


} 

package superherodriver; 
import java.util.Scanner; 
import java.util.Random; 

/** 
* 
* @author Daniel 
*/ 

public class SuperHeroDriver { 

static Scanner kb = new Scanner(System.in); 
public static SuperHero superman; 
public static SuperHero wonderwomen; 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     String name, superPower, answer; 
     double powerLevel; 
     boolean fly; 


     System.out.println("What is the name of your favorite super hero?"); 
     name = kb.nextLine(); 
     System.out.println("What is your super hero's power?"); 
     superPower = kb.nextLine(); 
     System.out.println("Can your super hero fly? (yes or no)"); 

     while(true){ 
      answer = kb.nextLine(); 
      if(answer.equalsIgnoreCase("yes")){ 
       fly = true; 
       break; 
      } else if(answer.equalsIgnoreCase("no")){ 
       fly = false; 
       break; 
      } else { 
       System.out.println("Sorry, you did not enter an approved response. Please answer yes or no."); 
      } 
     } 
     do{ 
      System.out.println("What is your starting power level? Choose between (0-100)"); 
      powerLevel = kb.nextDouble(); 
     } while(powerLevel < 0 || powerLevel > 100); 

     kb.nextLine(); 

     // Non-default contructor 
     superman = new SuperHero(name, superPower, powerLevel, fly); 
     // Default constructor 
     wonderwomen = new SuperHero(); 

     System.out.println("What is the name of your favorite super hero?"); 
     wonderwomen.setName(kb.nextLine()); 
     System.out.println("What is your super hero's power?"); 
     wonderwomen.setSuperPower(kb.nextLine()); 
     System.out.println("Can your super hero fly? (yes or no)"); 

     while(true){ 
      answer = kb.nextLine(); 
      if(answer.equalsIgnoreCase("yes")){ 
       wonderwomen.setCanFly(fly = true); 
       break; 
      } else if(answer.equalsIgnoreCase("no")){ 
       wonderwomen.setCanFly(fly = false); 
       break; 
      } else { 
       System.out.println("Sorry, you did not enter an approved response. Please answer yes or no."); 
      } 
     } 

     do{ 
      System.out.println("What is your starting power level? Choose between (0-100)"); 
      wonderwomen.setCurrentPowerLevel(kb.nextDouble()); 
     } while(wonderwomen.getCurrentPowerLevel() < 0 || wonderwomen.getCurrentPowerLevel() > 100); 

     do{ 
      fightCrime(superman, wonderwomen); 
      System.out.println("Superman's current power level is " + superman.getCurrentPowerLevel() + " and stopped " + superman.getCrimesStopped() + " crimes."); 
      System.out.println("Wonder woman's current power level is " + wonderwomen.getCurrentPowerLevel() + " and stopped " + wonderwomen.getCrimesStopped() + " crimes."); 

     }while(superman.getCurrentPowerLevel() > 0 && superman.getCrimesStopped() < 10); 

    } 

    public static void fightCrime(SuperHero superman, SuperHero wonderwomen){ 
     Random randomNumber = new Random(); 
     int ranNum1, ranNum2;  
     ranNum1 = randomNumber.nextInt(11) + 1; 
     ranNum2 = randomNumber.nextInt(11) + 1; 
     // Stop crime if random number is Even, lose power if odd 
     if(ranNum1 % 2 == 0){ 
      System.out.println("Crime was stopped!"); 
      superman.setCrimesStopped(superman.getCrimesStopped() + 1); 
     } 
     else{ 
      System.out.println("My powers are getting weaker!"); 
      superman.setCurrentPowerLevel(superman.getCurrentPowerLevel() - 10); 
     } 

     if(ranNum2 % 2 == 0){ 
      System.out.println("Crime was stopped!"); 
      wonderwomen.setCrimesStopped(wonderwomen.getCrimesStopped() + 1); 
     } 
     else{ 
      System.out.println("My powers are getting weaker!"); 
      wonderwomen.setCurrentPowerLevel(wonderwomen.getCurrentPowerLevel() - 10); 
     } 

    } 

} 
+1

Bitte lesen Sie [Erstellen eines ** minimalen **, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). – Andreas

+2

Ich habe das Problem nicht wirklich gut verstanden, aber von dem, was ich verstehen konnte, kannst du einfach 'superman.setCurrentPowerLevel (superman.getCurrentPowerLevel() - 10)' ' – dambros

+0

nennen Nachdem ich diesen Kommentar gesehen habe, habe ich festgestellt, dass ich den Kampf anrufe Funktion ein Inkrement ist nicht notwendig, es wird ständig die Funktion aufrufen und die -10 wie Sie setzen anwenden. – Danny

Antwort

1

Wie verhindere ich eine Eingabeaufforderung von übersprungen?

Da Scanner.nextDouble() nicht die Newline verbrauchen, die erzeugt wird, wenn der Benutzer ENTER, müssen Sie manuell das zu tun mit Scanner.nextLine(), sonst beim nächsten Mal, dass Scanner mit lesen versuchen, es wird sofort ein leeres Ergebnis zurück.

powerLevel = kb.nextDouble(); 
kb.nextLine(); 

Wie inkrementiere ich einen Getter?

Indem der Wert abgerufen, inkrementiert und der neue Wert an den Setter gesendet wird.

superman.setCrimesStopped(superman.getCrimesStopped() + 10); 
superman.setCurrentPowerLevel(superman.getCurrentPowerLevel() - 10);   
+0

Vielen Dank, das war sehr nützlich . Ich hatte vergessen, wenn ein Benutzer auf Enter klickt, führt dies zu einer neuen Zeile. Wenn ich einen% des aktuellen Leistungslevels abziehen möchte, wie könnte ich das mit einem Getter machen? Normalerweise hätte ich eine lokale Variable, die eine bestimmte Zahl multipliziert mit .1 speichert und diese von der lokalen Variablen abzieht. Da es sich jedoch um eine Benutzereingabe handelt, ist die Nummer unbekannt. – Danny

+0

Wenn ich Sie richtig verstehe, würden Sie einfach den Wert multiplizieren, den Sie vom Getter erhalten, und das Ergebnis an den Setter senden. Wenn lokale Variablen es klarer machen, dann benutze sie, sonst kannst du 'superman.setCurrentPowerLevel (superman.getCurrentPowerLevel() * 0.90);'. Dies wird mit "0,90" multipliziert, d. H. "10%" der Leistung abziehen. – BadCash