2016-04-01 8 views
0

Ich bin gerade dabei, eine Universitätspraxisprüfung im Vorfeld meiner Prüfung im Sommer zu absolvieren. Unten ist der Code, den ich bisher abgeschlossen habe: Ich kämpfe mit einem der Teile des Auftrags. Ich möchte Folgendes tun: "Erstellen Sie im Tester02 eine Methode namens startRobot, die eine polymorphe Methode ist. Diese Methode akzeptiert ein Objekt vom Typ Robot und ein Scanner-Objekt. Der Zweck der Methode ist es, den Roboter zu starten , den Roboter dazu bringen, eine Task-Methode auszuführen (Sie müssen hier die zwei Versionen der doTask-Methode ausführen) und dann den Roboter stoppen. "Java Polymorphe Methode

so im Grunde es fragt mich, die polymorphe Methode zu erstellen und es zweimal zu nennen, das erste Mal die EntertainmentRobot in es und dann das zweite Mal HumanStudyRobot übergeben. Ich bin mir nicht sicher, wie ich das im Tester einrichten soll, da ich nur Fehler erhalte, wenn ich versuche, den Code zu schreiben. Polymorphe Methoden/Polymorphie sind mir auch nicht wirklich bekannt.

Jede Hilfe würde sehr geschätzt werden!

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; 

    //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; 
    } 

    //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."); 
    } 
} 

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. \n The robot has started entertaining."); 
    } 

    @Override 
    public void stop() { 
     System.out.println("The Entertainment RObot has finsihed entertaining"); 
    } 

    @Override 
    public void doTask() { 

    } 

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

    public void talk() { 

    } 

    public void play() { 
     System.out.println("How many times would you like to play?"); 
     if (getEnergy() >= energyRequired()) { 
      energyConsumption(); 
     } 
     else 
      if (getEnergy() < energyRequired()) { 
       System.out.println("The robot does not have sufficient energy to play."); 
       regenerate(); 
       System.out.println("The robot is regenerating"); 
       System.out.println("........................."); 
       System.out.println("The robot has finished regenerating!"); 
      } 
    } 

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

} 


package Program; 

import java.util.Scanner; 

public class Tester02 { 

    public static void main(String[] args) { 

     HumanStudyRobot HumanStudyRobot1 = new HumanStudyRobot("HRP", 1.5, 58.0, "Kawada Industries"); 
     HumanStudyRobot1.setPurpose("Study into human movement and perform a wide range of tasks."); 
/*  
     System.out.println(HumanStudyRobot1.toString()); 

     HumanStudyRobot1.start(); 
     HumanStudyRobot1.study(); 
     HumanStudyRobot1.stop();*/ 

     public void startRobot(Robot, Scanner input){ 

     } 


     EntertainmentRobot EntertainmentRobot1 = new EntertainmentRobot("QRIO", 0.6, 7.3, "SONY"); 
     EntertainmentRobot1.setPurpose("To live with you, make life fun and make you happy."); 

     System.out.println(HumanStudyRobot1.toString()); 
     System.out.println(EntertainmentRobot1.toString()); 
    } 

} 
+0

Erstellen Sie einfach eine Methode wie gewünscht, die einen Roboter als Parameter verwendet. Dann rufe diese Funktion zweimal auf und übergebe den einen Robotertyp zum ersten Mal und den zweiten zum anderen. Dann müssen Sie einfach die allgemeine Schnittstelle/Basisklasse von Robot innerhalb dieser Methode verwenden. Und Sie werden garantiert, dass jede Unterklasse von Robot von Ihrer Methode verwaltet wird, da jede Art von Roboter als Parameter verwendet wird. – ManoDestra

+0

Sie müssen eine Methode in der übergeordneten Klasse erstellen und die untergeordneten Klassen überschreiben. –

+0

Außerdem finde ich es merkwürdig, dass du mit Polymorphie nicht wirklich vertraut bist, aber du hast es erfolgreich mit deinen 'start',' stop' und 'doTask' Methoden implementiert. Was Sie wahrscheinlich vergessen, ist, wie Sie Ihre Objekte instanziieren. Du solltest "Robot entertainmentRobot1 = new EntertainmentRobot (...);' –

Antwort

1

Erste Beobachtung: Ihre startRobot Methode Unterschrift ungültig ist, ändern Sie ihn auf

public void startRobot(Robot robot, Scanner input){ 

} 

Zweite Beobachtung: die Methode Erklärung außerhalb des Hauptverfahrens bewegen.

Dritte Beobachtung: Rufen Sie startRobot von der Hauptmethode mit Ihren Roboter- und Scannerparametern an.

startRobot(EntertainmentRobot1, /*your scanner*/); 
startRobot(HumanStudyRobot1, /*your scanner*/); 

Da beide Klassen erweitern die Robot Klasse - sie können zur startRobot Methode übergeben werden. Für weitere Informationen zu diesem Thema wenden Sie sich an die Oracle Documentation.

0

Hier ist nichts falsch mit dem Code. Da Sie die Prinzipien des Polymorphismus nicht verstehen, müssen Sie daran arbeiten. 3 Roboterklassen extend Robot Klasse, die eine abstrakte Klasse ist, müssen Unterklassen super Klassen abstrakte Methoden überschreiben. In Ihrem Fall sind die abstrakten Methoden

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

Da alle Roboter Klassen Unterklassen sind Sie etwas wie diese

Robot humanrobot = new HumanStudyRobot("parameters..."); 
Robot entertainment = new EntertainmentRobot("parameters"); 

public void startRobot(Robot robot, Scanner input){ 
robot.dotask(); 
} 

startRobot(humanrobot, scanner); 
startRobot(entertainment, scanner); 
+0

Fehlender Scanner-Parameter von diesen startRobot-Rufen dort :) – ManoDestra

+0

Entschuldigung !! jetzt behoben – Priyamal

0

im so gut wie sicher im auf dem gleichen Kurs wie Sie tun können, wie im genau tun gleiche Frage, jedenfalls nach dem bei der Suche, was die Leute über gesagt haben, habe ich diese Arbeit, indem Sie diese:

public static void main(String[] args) { 
    EntertainmentRobot jim = new EntertainmentRobot(0.6, "SONY", "QRIO", "To live with you, make life fun and make you happy", 7.3); 
    HumanStudyRobot jeff = new HumanStudyRobot(1.5, "Kawada Industries", "HRP", "Study into human movement and perfrom a wide range of tasks", 58.0); 
    //System.out.println(jim); 
    //System.out.println(jeff); 
    //EntertainmentRobot jim = robot(); 
    Scanner input = new Scanner(System.in); 
    startRobot(jim, input); 
    startRobot(jeff, input); 

} 

public static void startRobot(Robot robot, Scanner input) { 
    /* 
    * POLYMORPHIC METHOD 
    * Accept an object of type robot 
    * Scanner object 
    * Start the robot 
    * Get robot to undertake a task 
    * stop the robot 
    */ 
    robot.start(); 
    robot.doTask(); 
    robot.stop();`enter code here` 

} 

}