Ошибка «переменная может не инициализироваться» при попытке использовать объект класса в качестве параметра метода, пытался использовать IF, чтобы избежать проблемы (JAVA)

#java #oop

#java #ооп

Вопрос:

Я изучаю JAVA и в качестве примера создавал код для системы продаж товаров в магазине. Итак, я создал классы Product, Customer и Sale .

В моем меню я проверяю, есть ли зарегистрированный продукт или клиент, если да, я вызываю свой метод продаж, который имеет оба параметра. Однако NetBeans выдает сообщение об ошибке, что переменная не была инициализирована, даже с логикой не начинать продажу, если регистрация не была выполнена ранее.

Мой базовый код: «переменная product, возможно, не была инициализирована» «переменная customer, возможно, не была инициализирована»

 //Main
//Reg a client and a product, then perform a sale.
package store;

import java.util.Random;
import java.util.Scanner;

public class Store {
static boolean flagProduct=false, flagCustomer=false;

   public static void main(String[] args) {
    menu();
   }
   
   public static void menu() {
   System.out.println("n Choose option:n"
     "1 - Product Registrationn"
     "2 - Customer Registrationn"
     "3 - Selln"
     "4 - Endn"
   );

   Scanner scanner = new Scanner(System.in);
   int select = scanner.nextInt();

   switch (select) {
       case 1:
       Product product = RegistProduct();
        System.out.print("n Cod product : "   product.getCodProduct());
        System.out.print("n Price product : "   product.getPriceProduct());
        System.out.print("n Quantity product : "   product.getQuantProduct());
       menu();break;
       case 2:
       Customer customer = RegistCustomer();
       System.out.print("n Cod Customer : "   customer.getCodCustomer());
       System.out.print("n Customer name: "   customer.getName());
       menu();break;
       case 3:
           if(flagProduct == true amp;amp; flagCustomer==true){ 
               Sale sale = sell(product, customer); // *****where the error happens*****
               System.out.print("n Sale code : "   sale.getCodSale());
               System.out.print("n Customer name: "   customer.getName());
               System.out.print("n Cod product : "   product.getCodProduct()  " -- Quantity:"   sale.getQuantSale()  " -- Total:"   sale.getValueSale());
           } else if(flagProduct == true amp;amp; flagCustomer==false){
               System.out.println("First register the customer ");
               menu();break;
           } else if(flagProduct == false amp;amp; flagCustomer==true){
               System.out.println("First register the product");
               menu();break;
           } else
               System.out.println("First register the customer and product");
               menu();break;
       case 4:
       break;
       default:
       System.out.println("Error");
       menu();
   }
}

public static Product RegistProduct(){
   Product product = new Product();
   java.util.Scanner scanner = new Scanner(System.in);
   
   System.out.print("Product code:n");
   product.setCodProduct(scanner.nextInt());
   
   System.out.print("Product price:n");
   product.setPriceProduct(scanner.nextFloat());
   
   System.out.print("Product quantity:n");
   product.setQuantProduct(scanner.nextInt());
   flagProduct = true;
   return product;  
}

public static Customer RegistCustomer(){
   Customer customer = new Customer();
   java.util.Scanner scanner = new Scanner(System.in);
   
   System.out.print("Customer name:n");
   customer.setName(scanner.nextLine());
   
   System.out.print("Customer code:n");
   customer.setCodCustomer(scanner.nextInt());
   
   flagCustomer=true;
   return customer;  
}


public static Sale Sell(Product product, Customer customer){
   java.util.Scanner scanner = new Scanner(System.in);
   
   Random num = new Random();
   int codSale = num.nextInt(9999);
   
   Sale sale = new Sale();
    
   sale.setCodSale(codSale);
   
     
   System.out.print("Customer code:");
   int codSaleCustomer = scanner.nextInt();
   
   while (codSaleCustomer != customer.getCodCustomer()){
       System.out.print("Non-existent code. Please enter a valid code:n");
       codSaleCustomer = scanner.nextInt();
   }
   
     
   System.out.print("Product code:");
   int codSaleProduct = scanner.nextInt();
   
   while (codSaleProduct != product.getCodProduct()){
       System.out.print("Non-existent code. Please enter a valid code:n");
       codSaleProduct = scanner.nextInt();
   }
   
   System.out.print("Quantity of products purchased:n");
   sale.setQuantSale(scanner.nextInt());
   
   sale.setValueSale(sale.getQuantSale()*product.getPriceProduct());
   
   product.setQuantProduct(product.getQuantProduct() - sale.getQuantSale());
   System.out.print("Remaining quantity in stock: "  product.getQuantProduct());
   return sale;
}
}
  
 //Class Product
package store;

public class Product {

private int codProduct;
private float priceProduct;
private int quantProduct;

    public int getCodProduct() {
        return codProduct;
    }

    public void setCodProduct(int codProduct) {
        this.codProduct = codProduct;
    }

    public float getPriceProduct() {
        return priceProduct;
    }

    public void setPriceProduct(float priceProduct) {
        this.priceProduct = priceProduct;
    }

    public int getQuantProduct() {
        return quantProduct;
    }

    public void setQuantProduct(int quantProduct) {
        this.quantProduct = quantProduct;
    }

}
  
 //Class customer
package store;

public class Customer {
    private int codCustomer;
    private String name;

    public int getCodCustomer() {
        return codCustomer;
    }

    public void setCodCustomer(int codCustomer) {
        this.codCustomer = codCustomer;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

       
}

  
 //Class sale
package store;

public class Sale extends Product{ //I dnno if extends is necessary
    private int codSale;
    private int quantSale;
    private float valueSale;

    public int getCodSale() {
        return codSale;
    }

    public void setCodSale(int codSale) {
        this.codSale = codSale;
    }

    public int getQuantSale() {
        return quantSale;
    }

    public void setQuantSale(int quantSale) {
        this.quantSale = quantSale;
    }

    public float getValueSale() {
        return valueSale;
    }

    public void setValueSale(float valueSale) {
        this.valueSale = valueSale;
    }
   
}
  

Комментарии:

1. Сначала вы должны присвоить значения по умолчанию всем таким переменным, чтобы избежать этой ошибки.

2. Причина , по которой вы получаете ошибку по вашему указанию: … Обратите внимание, как product ссылка определяется внутри case 1 , а customer внутри case 2 , но case 3 ни в одной из этих переменных не известны, поэтому необходимы значения по умолчанию. Итак, может быть, что строки продукта и клиента, возможно, должны быть перемещены до точки перед переключением? Очевидно, я не уверен в фактических потребностях в потоке / обработке программы, но это, по-видимому, поможет избежать ситуации.