Компилятор показывает сообщение об ошибке «Не удается найти символ» при попытке сослаться на класс SteppingStone5_Recipe в другом классе в том же пакете - PullRequest
0 голосов
/ 20 марта 2020

Компилятор показывает сообщение об ошибке «Не удается найти символ» при попытке сослаться на класс SteppingStone5_Recipe в другом классе в том же пакете. Я думал, что проблема была в том, что у классов были разные пакеты, но как только я переименовал пакеты, используя инструмент компилятора, это решение не сработало.

Это класс SteppingStone6_RecipeBox:

package SteppingStones;

  import java.util.ArrayList;
  import java.util.Scanner;

  public class SteppingStone6_RecipeBox {

/**
 * @param args the command line arguments
 */

private ArrayList<SteppingStone5_Recipe> listOfRecipes;

/**
 * @param args the command line arguments
 */
/**
 * @return the listOfRecipes
 */
public ArrayList<SteppingStone5_Recipe> getListOfRecipes() {
    return listOfRecipes;
}

/**
 * @param listOfRecipes the listOfRecipes to set
 */
public void setListOfRecipes(ArrayList<SteppingStone5_Recipe> listOfRecipes) {
    this.listOfRecipes = listOfRecipes;
}

public SteppingStone6_RecipeBox() {
    this.listOfRecipes = new ArrayList();
}

public SteppingStone6_RecipeBox(ArrayList<SteppingStone5_Recipe> listOfRecipes) {
    this.listOfRecipes = listOfRecipes;
}

public void printAllRecipeDetails(String selectedRecipeName) {
    for (int i = 0; i < listOfRecipes.size(); i++) {
        if (!listOfRecipes.get(i).getRecipeName().equals(selectedRecipeName)) {
        } else {
            listOfRecipes.get(i).printRecipe();
        }
    }
}

public void printAllRecipeNames() {
    for (SteppingStone5_Recipe currentRecipe : listOfRecipes) {
        System.out.println(currentRecipe.getRecipeName());
    }
}

public void addNewRecipe() {
    // 
    //Note: the next line only functions once the SteppingStone5_Recipe
    //class "main" method has been replaced with:
    //      public SteppingStone5_Recipe addNewRecipe()
    //
    //and the method is set to return new Recipe instead of printing it out
    //

    listOfRecipes.add(new SteppingStone5_Recipe().createNewRecipe());
}

public static void main(String[] args) {
    SteppingStone6_RecipeBox myRecipeBox = new SteppingStone6_RecipeBox();
    Scanner menuScnr = new Scanner(System.in);
    System.out.println("Menu\n" + "1. Add Recipe\n" + "2. Print All Recipe Details\n" + "3. Print All 
    Recipe Names\n" + "\nPlease select a menu item:");

    while (menuScnr.hasNextInt() || menuScnr.hasNextLine()) {
        System.out.println("Menu\n" + "1. Add Recipe\n" + "2. Print All Recipe Details\n" + "3. Print 
    All Recipe Names\n" + "\nPlease select a menu item:");
        int input = menuScnr.nextInt();
        if (input == 1) {
            myRecipeBox.addNewRecipe();
        } else if (input == 2) {
            System.out.println("Which recipe?\n");
            String selectedRecipeName = menuScnr.next();
            myRecipeBox.printAllRecipeDetails(selectedRecipeName);
        } else if (input == 3) {
            for (int j = 0; j < myRecipeBox.listOfRecipes.size(); j++) {
                System.out.println((j + 1) + ": " + 
    myRecipeBox.listOfRecipes.getRecipeName().get(j));
            }
        } else {
            System.out.println("\nMenu\n" + "1. Add Recipe\n" + "2. Print Recipe\n" + "3. Adjust 
            Recipe Servings\n" + "\nPlease select a menu item:");
        }
        System.out.println("Menu\n" + "1. Add Recipe\n" + "2. Print All Recipe Details\n" + "3. Print 
        All Recipe Names\n" + "\nPlease select a menu item:");

     }
  }

}

Это класс SteppingStone5_Recipe

package SteppingStones;


import java.util.Scanner;
import java.util.ArrayList;

public class SteppingStone5_Recipe {

private String recipeName;
private int servings;
private ArrayList<String> recipeIngredients;
private double totalRecipeCalories;

//accessor/getter for recipe name
public String getRecipeName() {
    return recipeName;
}
//mutator/setter for recipe name
public void setRecipeName(String recipeName){
    this.recipeName = recipeName;
}
//accessor for servings
public int getServings(){
    return servings;
}
//mutator for servings 
public void setServings(int servings){
    this.servings = servings;
}
//accessor for recipe ingredients
public ArrayList<String> getRecipeIngredients(){
    return recipeIngredients;
//mutator for recipe ingredients
}
public void setRecipeIngredients(ArrayList<String> recipeIngredients){
    this.recipeIngredients = recipeIngredients;
}
//accessor for the total of recipe calories
public double getTotalRecipeCalories(){
    return totalRecipeCalories;
}
//mutator for Total of recipe calories
public void setTotalRecipeCalories(double totalRecipeCalories){
    this.totalRecipeCalories = totalRecipeCalories;
}

public SteppingStone5_Recipe() {
    this.recipeName = "";
    this.servings = 0;
    this.recipeIngredients = new ArrayList<>();
    this.totalRecipeCalories = 0;
}

public SteppingStone5_Recipe(String recipeName, int servings, ArrayList<String> recipeIngredients, 
double totalRecipeCalories) {
    this.recipeName = recipeName;
    this.servings = servings;
    this. recipeIngredients = recipeIngredients;
    this.totalRecipeCalories = totalRecipeCalories;
}
public void printRecipe() { //method to print all instances of the recipe 
    double singleServingCalories = totalRecipeCalories / servings;
    System.out.println("Recipe: " + getRecipeName());
    System.out.println("Serves: " + getServings());
    System.out.println("Ingredients:");

    for(int i = 0; i < recipeIngredients.size(); ++i) {
        System.out.println(recipeIngredients.get(i));
    }
    System.out.println("Total Calories per serving: " + singleServingCalories);
}
public static void main(String[] args) {
    double totalRecipeCalories = 0;
    ArrayList<String> recipeIngredients = new ArrayList();
    boolean addMoreIngredients = true;
    Scanner scnr = new Scanner(System.in);

    System.out.println("Please enter the recipe name: ");
    String recipeName = scnr.nextLine();

    System.out.println("How many servings: ");
    int servings = scnr.nextInt();

    do {//Loop to add new ingredients until user inputs end
        System.out.println("Please enter the ingredient name" + 
            " or type end if you are finished entering ingredients: ");
        String ingredientName = scnr.next();
        if (ingredientName.toLowerCase().equals("end")) {
            addMoreIngredients = false;
        } else {
                //Add the ingredient name to recipeIngredients
                recipeIngredients.add(ingredientName);

            System.out.println("Please enter the ingredient amount: ");
            float ingredientAmount = scnr.nextFloat();

            System.out.println("Please enter the ingredient Calories: ");
            int ingredientCalories = scnr.nextInt();

            //Add the total Calories from this ingredient
            totalRecipeCalories = ingredientCalories * ingredientAmount;
        }

   } while (addMoreIngredients) ;
    //create new object recipe1 and use method printRecipe to display all properties of recipe
    SteppingStone5_Recipe recipe1 = new SteppingStone5_Recipe(recipeName, 
        servings, recipeIngredients, totalRecipeCalories);
    recipe1.printRecipe();
}

}

Я полностью потерялся из-за того, что не хватает или что я делаю неправильно.

1 Ответ

0 голосов
/ 20 марта 2020

Я не могу воспроизвести ошибку, о которой вы упомянули, но при выполнении кода обнаружил ошибку времени компиляции, которая подробно описана ниже -

A) В SteppingStone6_RecipeBox при добавлении нового метода рецепта в addNewRecipe невозможно найти createNewRecipe в классе SteppingStone5_Recipe

 //TODO Method not found
    listOfRecipes.add(new SteppingStone5_Recipe().createNewRecipe()); 

B) Вторая ошибка, которую я обнаружил в основном методе SteppingStone6_RecipeBox, когда вы неправильно получаете рецепт.

 for (int j = 0; j < myRecipeBox.listOfRecipes.size(); j++) {
                //TODO Changes Done..Kandy
                //System.out.println((j + 1) + ": " + myRecipeBox.listOfRecipes.getRecipeName().get(j));
                System.out.println((j + 1) + ": " + myRecipeBox.listOfRecipes.get(j).getRecipeName()); // correct code
            }

Однажды я прокомментировал точку A и после исправления точки B, когда я запускаю программу, она запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...