Warum bin ich immer die Fehlermeldung "die Methode Ist nicht definiert für den Typ"?
Lerne ich die Grundlagen an der Universität und möchte einige helfen mit die folgende Fehlermeldung von Eclipse : "Die Methode getCost() ist nicht definiert für den Typ ShopCLI" &
"Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method getCost() is undefined for the type ShopCLI
at components.ShopCLI.main(ShopCLI.java:39)
Hier ist mein code
public class ShopCLI {
public static void main(String[] args) {
ArrayList<Order> ord = new ArrayList<>();
System.out.println("Welcome to Sandwich Shop CLI V1!");
System.out.println("Please Choose and Option by Typing the Appropriate Number from the List");
System.out.println("1.New Order");
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();
System.out.println("Please Choose an Outer From the List: ");
System.out.println("Press 1 to Continue or 2 to Exit");
int Sandwich = sc.nextInt();
System.out.println("Outer Options are Bun, Bread or Brioche");
String inputOuter = sc.next();
System.out.println("Inner Options are Ham, Cheese or Cucumber");
String inputInner = sc.next();
System.out.println("Sauce Options are Mayo, Butter or Marmite");
String inputSauce = sc.next();
if (Sandwich == 1){
ord.add(new Order(1, inputOuter, inputInner, inputSauce, 0));
System.out.println("You Made a " + inputInner + " with " + inputSauce + " Sandwich on " + inputOuter);
System.out.println("This Will Cost " + getCost());
}
else if (Sandwich == 2){
System.out.println("Exited.");
}
}
}
public class Sandwich {
//Fields
ArrayList<Sandwich> sandwich = new ArrayList<>();
String outer;
String inner;
String sauce;
//Constructor
public Sandwich(String outer, String inner, String sauce){
this.outer = outer;
this.inner = inner;
this.sauce = sauce;
}
//Methods
public String getOuter(){
return outer;
}
public String getInner(){
return inner;
}
public String getSauce(){
return sauce;
}
public void setOuter(String repOuter){
outer = repOuter;
}
public void setInner(String repInner){
inner = repInner;
}
public void setSauce(String repSauce){
sauce = repSauce;
}
public void createSandwich(String outer, String inner, String sauce){
sandwich.add(new Sandwich(outer, inner, sauce));
}
public void setSandwich(String repOuter, String repInner, String repSauce){
outer = repOuter;
inner = repInner;
sauce = repSauce;
}
public void resetOrder(){
sandwich.removeAll(sandwich);
}
}
public class Order extends Sandwich {
//Fields
int OrderId;
double Cost;
//Constructor
public Order(int OrderId, String outer, String inner, String sauce, int Cost) {
super(outer, inner, sauce);
this.OrderId = OrderId;
this.Cost = Cost;
}
//Methods
public int getOrderId(){
return this.OrderId;
}
public double getCost(){
return this.Cost;
}
public void setOrderId(int repOrderID){
this.OrderId = repOrderID;
}
public void overrideCost(int Cost){
this.Cost = Cost;
}
public void setOrder(int repOrderId, String repOuter, String repInner, String repSauce){
this.OrderId = repOrderId;
this.outer = repOuter;
this.inner = repInner;
this.sauce = repSauce;
double calcCost;
double outerCost = 0;
double innerCost = 0;
double sauceCost = 0;
//Outer Cost
if(repOuter == "Bun")
{
outerCost = 0.5;
}
else if(repOuter == "Bread")
{
outerCost = 0.25;
}
else if(repOuter == "Brioche")
{
outerCost = 0.75;
}
else
{
System.out.println("Invalid Bread Type");
}
//Inner cost
if(repInner == "Ham")
{
innerCost = 0.5;
}
else if(repInner == "Cheese")
{
innerCost = 0.25;
}
else if(repInner == "Cucumber")
{
innerCost = 0.75;
}
else
{
System.out.println("Invalid Filling Type");
}
//Sauce Cost
if(repSauce == "Mayo")
{
sauceCost = 0.5;
}
else if(repSauce == "Butter")
{
sauceCost = 0.25;
}
else if(repSauce == "Marmite")
{
sauceCost = 0.75;
}
else
{
System.out.println("Invalid Sauce Type");
}
calcCost = outerCost + innerCost + sauceCost;
this.Cost = calcCost;
}
}
InformationsquelleAutor Jon0149 | 2015-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
getCost
Methode definiert ist, um Klasse und nicht inShopCLI
Klasse. Also dein code:Sollte geändert werden, um
Können Sie fügen Sie den code, den Sie geändert in deiner Frage? Hast du die änderungen wie oben genannt? bemerken, dass ich nicht eingesetzten Kapitals O in Ordnung und ich verwendet haben, um die Instanz, die ich zuvor erstellt haben, wenn Sie das Kontrollkästchen meine Antwort.
Ich verwendet die code-Korrektur
ord.get(0).getCost());
von unten-und jetzt ist es kompiliert, aber die Kosten werden nicht aktualisiertHaben Sie Lesen meine Antwort und kann Sie entsprechend verändern?
Ich habe die Antwort Lesen und verändert es entsprechend, aber ich bekomme noch immer eine
getCost() = 0.0
InformationsquelleAutor SMA
müssen Sie das Objekt aus der arraylist, dann tun Sie Zugang Methode:
diese 0 zurück, da Sie den Aufwand 0 im Konstruktor:
auch einen Namen für Ihre integer "Sandwich" zu "sandwich" ohne die Großbuchstaben. anders sieht es aus, du meinst die Klasse "Sandwich"
InformationsquelleAutor cody b
In dieser Zeile:
...Sie müssen nicht angeben, was Sie wollen zu nennen
getCost()
auf, so ruft Sie es auf ShopCLI, weil das ist, wo der Anruf geschieht. Aber ShopCLI nichtgetCost()
Methode. Müssen Sie rufen Sie es auf Ihre Bestellung:Das funktioniert auch, aber wenn Sie erstellen Sie Ihre Order-Objekt durch Aufruf des Konstruktors, du bist nicht der Berechnung der Kosten, sondern eher die Einstellung, was auch immer übergeben wird. Aktualisieren Sie Ihren Konstruktor:
Nun der Konstruktor funktioniert, aber Sie müssen entfernen, ein argument, von wo Sie anrufen, so ändern Sie Ihre ord.Zeile hinzufügen:
Sollte, wenn ich mich nicht Irre Arbeit. Jedoch, möchten Sie vielleicht in Erwägung ziehen, eine private Hilfsmethode namens calculateCost, so dass Sie nicht duplizieren von code zwischen Ihrem Konstruktor und Ihrer setOrder Methoden.
if()
- Anweisung.This Will Cost 0.0
ausgegeben wirdIhre massive if-Anweisung wird nur genannt in setOrder(). Versuchen Sie die wenn-Anweisung, um Ihre Bestellung Konstruktor.
Ich aktualisiert meine Antwort. Bitte schauen Sie auf es. Es sollte dein problem erklärst.
Die Antwort kompiliert und läuft, aber wenn ich drucken Sie die Kosten heraus, es zeigt immer noch 0.0
System.out.println("This Will Cost " + ord.get(0).getCost());
InformationsquelleAutor Dogs
Erstellen einer Bestellung
Die Kosten für eine Bestellung wird durch die Methode setOrder(int repOrderId, String repOuter, String repInner, String repSauce)
ändern Sie diese Methode, die der folgenden.
Bekommen Sie jetzt die Kosten durch den Aufruf der getCost() auf die Bestellung wie folgt.
Zur Berechnung der Reihenfolge Kosten, rufen Sie
um.setOrder();
Um die Reihenfolge Kosten, rufen Sie
um.getCost();
HINWEIS: nicht mit == zu vergleichen string. Verwenden Sie immer die equals() oder equalsIgnoreCase().
InformationsquelleAutor AshanPerera
habe ich modifiziert Ihren code für die Klasse ShopCLI
format und der
setOrder
Methode ist modifiziert zupublic void setOrder(String repOuter, String repInner, String repSauce)
InformationsquelleAutor Anurag Bharti