#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
ни в одной из этих переменных не известны, поэтому необходимы значения по умолчанию. Итак, может быть, что строки продукта и клиента, возможно, должны быть перемещены до точки перед переключением? Очевидно, я не уверен в фактических потребностях в потоке / обработке программы, но это, по-видимому, поможет избежать ситуации.