Pourquoi j'obtiens le message d'erreur “la Méthode n'Est pas définie pour le type”?
Je suis en train d'apprendre les bases à l'Université et voudrais un peu d'aide avec l'erreur suivante à partir de l'Éclipse : "La méthode getCost() n'est pas défini pour le type 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)
Voici mon 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;
}
}
Vous devez vous connecter pour publier un commentaire.
getCost
méthode est définie dans l'ordre de la classe et non dansShopCLI
classe. Ainsi, votre code:Doit être modifié pour
ord.get(0).getCost());
à partir de ci-dessous et maintenant il compile mais les coûts ne sont pas mis à jourgetCost() = 0.0
new Order(1, inputOuter, inputInner, inputSauce, 0)
voir le dernier paramètre.vous devez obtenir l'objet à partir de la liste de tableaux, puis de faire de l'acces a la méthode:
ce sera le retour de 0, puisque vous définissez le coût 0 dans le constructeur:
aussi, le nom de votre integer "Sandwich" à "sandwich" sans la lettre majuscule. sinon, il ressemble à la moyenne de la classe "Sandwich"
Dans cette ligne:
...vous ne spécifiez pas ce que vous voulez l'appeler
getCost()
, il l'appelle sur ShopCLI parce que c'est là l'appel qui se passe. Mais ShopCLI n'ont pas degetCost()
méthode. Vous avez besoin d'appeler votre commande:Cela fonctionne, mais lorsque vous créez votre objet de Commande en appelant le constructeur, vous n'êtes pas calculer le coût, mais plutôt de définir ce qui est passé. Mise à jour de votre constructeur pour cela:
Maintenant votre constructeur travaille, mais vous aurez à supprimer un argument lorsque vous êtes en l'appelant, de sorte que le changement de votre ord.ajouter la ligne à ceci:
Qui devrait, si je ne me trompe pas de travail. Cependant, vous pourriez envisager de faire un helper privées méthode appelée calculateCost, de sorte que vous n'êtes pas la duplication de code entre votre constructeur et votre setOrder méthodes.
if()
déclaration.This Will Cost 0.0
est sortieSystem.out.println("This Will Cost " + ord.get(0).getCost());
Créer un Ordre
Le coût pour une commande est définie par la méthode setOrder(int repOrderId, Chaîne repOuter, Chaîne repInner, Chaîne repSauce)
modifier cette méthode à la suivante.
Maintenant, vous pouvez obtenir le coût par appel de la getCost() sur le bon de commande comme suit.
Pour calculer le coût de la commande, appelez
ordre.setOrder();
Pour obtenir le coût de la commande, appelez
ordre.getCost();
REMARQUE: N'utilisez pas de == pour comparer des string. Toujours utiliser equals() ou equalsIgnoreCase().
j'ai modifié ton code pour la classe ShopCLI
et le format de
setOrder
méthode est également modifiéespublic void setOrder(String repOuter, String repInner, String repSauce)