Вызов метода, который создает экземпляр класса, видит неправильные типы переменных - PullRequest
1 голос
/ 30 апреля 2020

Мне трудно найти свою проблему.

У меня есть класс с именем Prodcut:

class Product extends ObjectIDs implements Output  {

    private String prodName;
    private int quantity;
    private Double cost;

У него также есть переменная Id, полученная из другого источника. учебный класс. Это тип String. Обычно каждый экземпляр Product выглядит примерно так: Product P = new Prodcut(String, String, int, double)

Продолжая, у меня есть класс Store, в котором я все создаю. У меня есть метод с именем newProdcut, который позволяет мне создавать новый Произведите и верните его:

Product newProdcut(String id, String prodName, Integer prodQuantity, Double prodCost) throws Exception {
        Scanner sc = new Scanner(System.in);
        for ( Product p : products ) {
            if ( id.equals(p.id)) {
                System.out.println("Product already exists, please enter the number of the quantity you want to add to the existing quantity:");
                int inputQuantity = sc.nextInt();
                prodQuantity += inputQuantity;
            }
        }
        Product p = new Product(id, prodName, prodQuantity, prodCost);
        this.products.add(p);
        System.out.println("Prodcut "+p.createOutput()+" was added to the list");
        return p;
    }

Теперь у меня также есть консольное меню, которое вызывает эту функцию и заполняет ArrayList с возвратом:

   private static ArrayList<String> menuAddProdcut() throws Exception { // 1. Add a prodcut
       Random rand = new Random();
       System.out.println("You're adding a new prodcut");
       ArrayList newProductArray = new ArrayList<>();      
       int prodId = rand.nextInt(1000) + 100;
       String prodIdStr = Integer.toString(prodId); 
       System.out.println("Enter product name:");
       String prodName = sc.nextLine();
       System.out.println("Enter quantity:");
       Integer prodQuantity = sc.nextInt();
       System.out.println("Enter product's price:");
       Double price = sc.nextDouble();
       newProductArray.add(prodIdStr); //str-converted ID
       newProductArray.add(prodName);
       newProductArray.add(prodQuantity);
       newProductArray.add(price);

       return newProductArray;         
   }

Затем я вызываю это Метод из меню:

   case 1:
       try {
         ArrayList<String> productToPopulate = Menu.menuAddProdcut();
         st.newProdcut(productToPopulate.get(0), productToPopulate.get(1), productToPopulate.get(2), productToPopulate.get(3));
      } catch (Exception e) {
             e.printStackTrace();
     }

Я получаю следующее сообщение об ошибке:

The method newProdcut(String, String, Integer, Double) in the type Store is not applicable for the arguments (String, String, String, String)

Я не понимаю, почему он считает, что вход должен быть все строки, когда ясно, что в Prodcut написано String String int double.

Любая помощь будет отличной.

1 Ответ

1 голос
/ 30 апреля 2020

Для вашего объявления метода newProdcut требуются аргументы типа (String, String, Integer, Double), тогда как в фрагменте кода, где вы вызываете метод, вы передаете 4 строки.

Используя Integer.parseInt(String) и Double.parseDouble(String) методов для преобразования ваших 3-го и 4-го аргументов в соответствующие типы.


В качестве альтернативного исправления вместо сохранения ввода пользователя в ArrayList of Strings в menuAddProduct, вы уже получили данные, хранящиеся в виде переменных, вызывают ваш метод непосредственно после ввода данных пользователем.

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