2016-04-04 8 views
-2

What I am asked to doМетоды Java с реализацией перечислений

Я приложил картину инструкции я приведенная в этой прошлой статье я в настоящее время пытаюсь завершить.

В настоящее время я заканчиваю университетский экзамен по практике в преддверии моего экзамена летом. До сих пор я закончил большую часть вопросника, но в настоящее время я придерживаюсь этой части.

Я реализовал интерфейсы в соответствии с инструкциями, и я также реализовал перечисление с указанием направлений. Где он говорит «Детали для методов Walk and Talk в классе Entertainment Robot», я не уверен, как сохранить входные данные от пользователя в виде перечисления. Мой код пока приведен ниже. Я был бы признателен за любую помощь в этом. Большое спасибо.

package Program; 

import java.util.Scanner; 


public abstract class Robot { 

    //instance variables 
    protected double EnergyUnitsRequired; 
    protected double height; 
    protected String manufacturer; 
    protected String name; 
    protected String purpose; 
    protected double weight; 
    protected double energy; 
    private Directions direction; 

    //constructor 
    public Robot(String name, double height, double weight, String manufacturer) { 
     super(); 
     this.EnergyUnitsRequired = 0.25; 
     this.height = height; 
     this.manufacturer = manufacturer; 
     this.name = name; 
     this.purpose = "The robot's purpose needs to be provided"; 
     this.weight = weight; 
     this.energy = 0.0; 
    } 

    //accessors & mutators 
    public double getEnergyUnitsRequired() { 
     return EnergyUnitsRequired; 
    } 

    public double getHeight() { 
     return height; 
    } 

    public String getManufacturer() { 
     return manufacturer; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getPurpose() { 
     return purpose; 
    } 

    public double getWeight() { 
     return weight; 
    } 

    public double getEnergy() { 
     return energy; 
    } 

    public void setEnergyUnitsRequired(double energyUnitsRequired) { 
     EnergyUnitsRequired = energyUnitsRequired; 
    } 

    public void setHeight(double height) { 
     this.height = height; 
    } 

    public void setManufacturer(String manufacturer) { 
     this.manufacturer = manufacturer; 
    } 

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

    public void setPurpose(String purpose) { 
     this.purpose = purpose; 
    } 

    public void setWeight(double weight) { 
     this.weight = weight; 
    } 

    public Directions getDirection() { 
     return direction; 
    } 


    public void setDirection(Directions direction) { 
     this.direction = direction; 
    } 

    //methods 
    public abstract void start(); 
    public abstract void stop(); 
    public abstract void doTask(); 
    public abstract void doTask(Scanner input); 

    public void energyConsumption() { 
     System.out.println("The robot: " + getName() + " has: " + getEnergy() + " to begin with."); 
     double priorEnergy = getEnergy(); 
     energy = energy - energyRequired(); //the variable energyRequired should be returned from the energyRequired method below this method. 
     System.out.println("My energy has depleted by the following amount: " + (priorEnergy - energy) + " units."); 
     System.out.println("My energy is now at: " + energy + " units."); 
    } 

    public double energyRequired() { 
     double energyRequired = (EnergyUnitsRequired * weight); 
     return energyRequired; 
    } 

    public void regenerate() { 
     energy = getEnergy() + (getWeight() * 2); 
     System.out.println("More energy is being generated for the robot."); 
     System.out.println("............................"); 
     System.out.println("I have now got more energy!."); 
    } 
} 

package Program; 

import java.util.Scanner; 

public class HumanStudyRobot extends Robot { 

    //instance variables 

    public HumanStudyRobot(String name, double height, double weight, String manufacturer) { 
     super(name, height, weight, manufacturer); 
     this.energy = 30.0; 
    } 

    @Override 
    public void start() { 
     System.out.println("This is a Human Study Robot"); 
     System.out.println("The robot has started studying."); 
    } 

    @Override 
    public void stop() { 
     System.out.println("The robot has finished studying."); 
    } 

    @Override 
    public void doTask() { 
    study(); 
    } 

    @Override 
    public void doTask(Scanner input) { 
     // TODO Auto-generated method stub 

    } 

    public void study() { 
    if (energy >= energyRequired()) { 
     energyConsumption(); 
    } 
    else 
     if (energy < energyRequired()) { 
      System.out.println("The robot does not have sufficient energy."); 
      regenerate(); 
      System.out.println("................"); 
      System.out.println("The robot has finished regenerating"); 
     } 
    } 


    public String toString() { 
     return "I AM A HUMAN STUDY ROBOT : \nThe details of the entertainment robot are below:\n" 
       + "Name : " + getName() + "\nWeight: " + getWeight() + "\nHeight: " 
       + getHeight() + "\nManufacturer : " + getManufacturer() + "\nPurpose : " 
       + getPurpose(); 
    } 

} 

package Program; 

import java.util.Scanner; 

import org.omg.Messaging.SyncScopeHelper; 

public class EntertainmentRobot extends Robot { 

    //constructor 
    public EntertainmentRobot(String name, double height, double weight, String manufacturer) { 
     super(name, height, weight, manufacturer); 
     this.energy = 10.0; 
     this.EnergyUnitsRequired = 0.75; 
    } 

    @Override 
    public void start() { 
     System.out.println("This is an Entertainment Robot. \nThe robot has started entertaining."); 
    } 

    @Override 
    public void stop() { 
     System.out.println("I have stopped entertaining people."); 
     System.out.println("--------------------------------------------------"); 
    } 

    @Override 
    public void doTask(Scanner input) { 
     play(); 
    } 


    @Override 
    public void doTask() { 
     // TODO Auto-generated method stub 
    } 

    public void talk() { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter a phrase for me to repeat"); 
     String phrase = input.nextLine(); 
     input.nextLine(); 
     System.out.println("You have asked me to say the following phrase : " + phrase); 
    } 

    public void walk() { 
     Scanner input = new Scanner (System.in); 
     System.out.println("Would you like me to walk for you?"); 
     if (input.nextLine().equalsIgnoreCase("Y")) { 
      System.out.println("For how many paces"); 
      int steps = input.nextInt(); 
      System.out.println("Which direction do you want me to walk? (Enter a number between 1 and 4.) "); 
      System.out.println("1 - " + Directions.FORWARD); 
      System.out.println("2 - " + Directions.BACKWARD); 
      System.out.println("3 - " + Directions.LEFT); 
      System.out.println("4 - " + Directions.RIGHT); 

     } 
    } 

    public void play() { 
     Scanner input = new Scanner(System.in); 
     boolean valid = false; 
     int selection; 
     do { 
     System.out.println("How many times would you like to play?"); 
     while (!input.hasNextInt()) { 
      System.out.println("That is not a number"); 
      input.nextLine(); 
     } 
     selection = input.nextInt(); 
     valid = true; 
     } while(!valid); 
     for (int i = 1; i < selection + 1; i ++) { 
      if (getEnergy() >= energyRequired()) { 
       energyConsumption(); 
      } else if (getEnergy() < energyRequired()) { 
       System.out.println("------------WHOOPS--------------."); 
       System.out.println("I do not have enough energy to play."); 
       regenerate(); 
      } 
     } 
     input.close(); 
    } 

    public String toString() { 
     return "---------------------------------\nI AM AN ENTERTAINMENT ROBOT \nThe details of the entertainment robot are below: \n" + 
       "Name : " + getName() + "\nWeight: " + getWeight() + "\nHeight: " + getHeight() + "\nManufacturer: " + 
       getManufacturer() + "\nPurpose: " + getPurpose() + "\n----------------------------"; 
    } 

} 

package Program; 

import java.util.Scanner; 

public interface Talkable { 
    abstract void talk(Scanner input); 
} 

package Program; 

import java.util.Scanner; 

public interface Walkable { 
    abstract void walk(Scanner input); 
} 

package Program; 

public enum Directions { 
    FORWARD,BACKWARD,LEFT,RIGHT; 
} 
+0

Вы, вероятно, нужно только 'switch' -statement, чтобы перевести введенный номер в соответствующее перечисление ... Но ваш вопрос очень длинный, может быть, слишком длинный для такой простой проблемы. –

+0

Вы можете использовать 'Directions.values ​​() [<введенное пользователем> -1]' – Sanjeev

+0

, почему это будет <пользовательское значение> -1? – Liam

ответ

0

Хранить ключевым направлением в самом перечислении, как:

public enum Direction { 

    FORWARD(1), BACKWARD(2), LEFT(3), RIGHT(4); 

    final int num; 

    Direction(int num) { 
     this.num = num; 
    } 

    static Direction ofNumber(int num) { 
     for (Direction d : values()) 
      if (d.num == num) 
       return d; 
     return null; 
    } 
} 

Затем, когда пользователь вводит номер, просто позвоните:

Direction selected = Direction.ofNumber(number); 
+0

Когда я пытаюсь добавить ключ с 1,2,3 и 4 в перечисление, это дает много ошибок. – Liam

+0

возможно из-за окончания 's'? Я назвал его «Направление» более подходящим. –

+0

no он дает мне ошибку «не определен в конструкторе» при попытке настроить: Направления (int num) { this.num = num; } – Liam