Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序未将对象保存到HashMap_Java_Object_Hashmap - Fatal编程技术网

Java程序未将对象保存到HashMap

Java程序未将对象保存到HashMap,java,object,hashmap,Java,Object,Hashmap,要么我的save_product函数在我的存储库中。java类没有正确地保存到mapproduct_存储库中,要么它确实保存了,但我在查找产品函数在我的存储库.java类中没有正确地输出它。我想我正在使用正确的函数来搜索地图中的值,。get 我尝试了product_repository.keySet().iterator().forEachRemaining(System.out::println)

要么我的
save_product
函数在我的
存储库中。java
类没有正确地保存到map
product_存储库
中,要么它确实保存了,但我在
查找产品
函数在我的
存储库.java
类中没有正确地输出它。我想我正在使用正确的函数来搜索地图中的值,
。get

我尝试了
product_repository.keySet().iterator().forEachRemaining(System.out::println)Controller.java
类中的
create\u new\u product
函数中将
键插入map
product\u存储库。我是java新手

Main.java

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
        Controller controller = new Controller();
        controller.create_new_product();
        controller.search_product();
    }
}
Product.java

package com.company;

public class Product {
    private String product_name;
    private String product_brand;
    private int product_cost;
    private int product_count;
    private boolean product_availability;

    public Product() {
    }

    public Product(String product_name, String product_brand,
                   int product_cost, int product_count, boolean product_availability) {
        this.product_name = product_name;
        this.product_brand = product_brand;
        this.product_cost = product_cost;
        this.product_count = product_count;
        this.product_availability = product_availability;
    }

    public String getProduct_name() {
        return product_name;
    }

    public void setProduct_name(String product_name) {
        this.product_name = product_name;
    }

    public String getProduct_brand() {
        return product_brand;
    }

    public void setProduct_brand(String product_brand) {
        this.product_brand = product_brand;
    }

    public int getProduct_cost() {
        return product_cost;
    }

    public void setProduct_cost(int product_cost) {
        this.product_cost = product_cost;
    }

    public int getProduct_count() {
        return product_count;
    }

    public void setProduct_count(int product_count) {
        this.product_count = product_count;
    }

    public boolean isProduct_availability() {
        return product_availability;
    }

    public void setProduct_availability(boolean product_availability) {
        this.product_availability = product_availability;
    }
}
Controller.java

package com.company;

import java.util.Scanner;

public class Controller {
    private static Long key;

    public static void create_new_product(){
        Repository repository = new Repository();
        //Supplier supplier = new Supplier();
        Product product = new Product();
        Scanner scanner = new Scanner(System.in);
        key = 0L;

        System.out.println("*****************************************************************");
        System.out.println("********************NEW PRODUCT CREATION PAGE********************");
        System.out.println("*****************************************************************");

        System.out.println("Enter product name: ");
        String name = scanner.nextLine();
        product.setProduct_name(name);

        System.out.println("Enter product brand: ");
        String brand = scanner.nextLine();
        product.setProduct_brand(brand);

        System.out.println("Enter product cost: ");
        int cost = scanner.nextInt();
        product.setProduct_cost(cost);

        System.out.println("Enter amount of products in stock: ");
        int amount = scanner.nextInt();
        product.setProduct_count(amount);

        key++;
        repository.save_product(key, product);
    }

    public void search_product(){
        Repository repository = new Repository();
        Product product = new Product();
        Scanner scanner = new Scanner(System.in);

        System.out.println("*****************************************************************");
        System.out.println("*************************FIND PRODUCT PAGE***********************");
        System.out.println("*****************************************************************");
        // TO DO: Choices or if/else blocks not executing properly
        System.out.println("\nSearch by ID or name?\nPress '1' for ID. Press '2' for name: ");
        String choice = scanner.next();
        if (choice.equals("1")) {
            System.out.println("Enter product id: ");
            Long id = scanner.nextLong();
            repository.find_product(id);

            try{
                if (product.getProduct_count() > 0){
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } catch (Exception e) {
                System.out.println(product.getProduct_name() + " are out of stock.");
            }
        }

        else if (choice.equals("2")) {
            System.out.println("Enter product name: ");
            String name = scanner.next();
            repository.find_product(name);

            try{
                if (product.getProduct_count() > 0){
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } catch (Exception e) {
                System.out.println(product.getProduct_name() + " are out of stock.");
            }
        }
        else {
            System.out.println("Error. We apologize for the inconvenience.");
        }
    }
}
Repository.java

package com.company;

import java.util.HashMap;
import java.util.Map;

public class Repository {
    private Map<Long, Product> product_repository = new HashMap<Long, Product>();

    // TO DO: Implement while loops so program doesn't exit at the first error

    public void save_product(Long key, Product newProductMap){
        try{
            if (product_repository.containsValue(newProductMap)) {
                System.out.println("This product is already in the system." +
                        "\nFor safety reasons, we cannot add the same product twice.");
            }
            else {
                product_repository.put(key, newProductMap);
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
    }

    public void find_product(Long key){
        try {
            if (product_repository.containsKey(key)) {
                System.out.println(product_repository.get(key));
            }
            else {
                System.out.println("No matches were found for product id: " + key);
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
    }

    // Overload
    public void find_product(String name) {
        try {
            if (product_repository.containsValue(name)) {
                System.out.println(product_repository.get(name));
                product_repository.keySet().iterator().forEachRemaining(System.out::println);
            }
            else {
                System.out.println("No matches were found for product name: " + name);
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
    }
}

package.com公司;
导入java.util.HashMap;
导入java.util.Map;
公共类存储库{
私有映射产品_repository=new HashMap();
//要做的事情:实现while循环,这样程序就不会在第一次出错时退出
public void save_产品(长键,产品newProductMap){
试一试{
if(product_repository.containsValue(newProductMap)){
System.out.println(“此产品已在系统中。”+
“\n出于安全原因,我们不能添加同一产品两次。”);
}
否则{
product_repository.put(key,newProductMap);
}
}捕获(例外e){
System.out.println(“系统错误。请咨询数据库管理员”);
}
}
public void find_产品(长密钥){
试一试{
if(产品存储库容器(密钥)){
System.out.println(product_repository.get(key));
}
否则{
System.out.println(“未找到与产品id:+密钥匹配的项”);
}
}捕获(例外e){
System.out.println(“系统错误。请咨询数据库管理员”);
}
}
//超载
public void find_产品(字符串名称){
试一试{
if(产品存储库包含值(名称)){
System.out.println(product_repository.get(name));
product_repository.keySet().iterator().forEachRemaining(System.out::println);
}
否则{
System.out.println(“未找到产品名称:“+name”)的匹配项);
}
}捕获(例外e){
System.out.println(“系统错误。请咨询数据库管理员”);
}
}
}

您必须将
存储库
作为
控制器
类的一个字段。在执行方法
create\u new\u product
search\u product
后,您当前正在丢弃存储库。因此,您需要删除每个方法的第一行

 //main stays the same
 public class Main {

    public static void main(String[] args) {
        // write your code here
        Controller controller = new Controller();
        controller.create_new_product();
        controller.search_product();
    }

}


 //controller is a bit changed. Added global repository and improved the search.
import java.util.Collection;
import java.util.Scanner;

public class Controller {
    private static Long key;

    Repository repository = new Repository();

    public void create_new_product() {
        Product product = new Product();
        Scanner scanner = new Scanner(System.in);

        System.out.println("*****************************************************************");
        System.out.println("********************NEW PRODUCT CREATION PAGE********************");
        System.out.println("*****************************************************************");
        System.out.println("Enter product id: ");
        long id = Long.parseLong(scanner.nextLine());
        product.setProductId(id);

        System.out.println("Enter product name: ");
        String name = scanner.nextLine();
        product.setProduct_name(name);

        System.out.println("Enter product brand: ");
        String brand = scanner.nextLine();
        product.setProduct_brand(brand);

        System.out.println("Enter product cost: ");
        int cost = scanner.nextInt();
        product.setProduct_cost(cost);

        System.out.println("Enter amount of products in stock: ");
        int amount = scanner.nextInt();
        product.setProduct_count(amount);

        repository.save_product(id, product);
    }

    public void search_product() {
        Scanner scanner = new Scanner(System.in);

        System.out.println("*****************************************************************");
        System.out.println("*************************FIND PRODUCT PAGE***********************");
        System.out.println("*****************************************************************");
        // TO DO: Choices or if/else blocks not executing properly
        System.out.println("\nSearch by ID or name?\nPress '1' for ID. Press '2' for name: ");
        String choice = scanner.next();
        if (choice.equals("1")) {
            System.out.println("Enter product id: ");
            Long id = scanner.nextLong();
            Product product = repository.find_product(id);

            try {
                if (product.getProduct_count() > 0) {
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } catch (Exception e) {
                System.out.println(product.getProduct_name() + " are out of stock.");
            }
        } else if (choice.equals("2")) {
            System.out.println("Enter product name: ");
            String name = scanner.next();
            Collection<Product> products = repository.find_products(name);

            if (products.size() > 0) {
                for (Product product : products) {
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } else {
                System.out.println(" out of stock.");

            }
        } else {
            System.out.println("Error. We apologize for the inconvenience.");
        }
    }
}


//Added a new field to the Repository so you can also search by key.
import java.util.*;

public class Repository {
    private Map<Long, Product> product_repository = new HashMap<Long, Product>();

    // TO DO: Implement while loops so program doesn't exit at the first error

    public void save_product(Long key, Product newProductMap) {
        try {
            if (!product_repository.containsKey(key)) {
                product_repository.put(key, newProductMap);
            } else {
                System.out.println("This product is already in the system." +
                        "\nFor safety reasons, we cannot add the same product twice.");
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
    }

    public Product find_product(final Long key) {
        try {
            if (product_repository.containsKey(key)) {
                System.out.println("Found product: " + product_repository.get(key).getProduct_name());
                return product_repository.get(key);
            } else {
                System.out.println("No matches were found for product id: " + key);
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
        return null;
    }

    // Overload
    public Collection<Product> find_products(final String name) {
        Collection<Product> values = new ArrayList<>();
        for (Map.Entry<Long, Product> productEntry : product_repository.entrySet()) {
            if (productEntry.getValue().getProduct_name().equals(name)) {
                System.out.println("matches were found for product name: " + name);
                values.add(productEntry.getValue());
            }
        }
        return values;
    }
}

另一个问题是在
find\u product(String name)
方法中,在该方法中调用
product\u存储库.get(name)
但name是
String
并且
get
方法需要一个ID,也就是说,一个
Long
,因此此调用将始终返回
null

,正如在必须将存储库设置为全局之前指出的那样。但是,整个代码有点凌乱。您正在搜索产品id,但该id未显示给您。这类似于搜索数据库记录,但ID是自动生成的。祝你好运。所以我建议允许这个程序也输入id。如果您想搜索id,那么它会更有意义。 否则,如果您只对值感兴趣,则可以取出id。 下面您可以找到适用于所有方法的修改代码

 //main stays the same
 public class Main {

    public static void main(String[] args) {
        // write your code here
        Controller controller = new Controller();
        controller.create_new_product();
        controller.search_product();
    }

}


 //controller is a bit changed. Added global repository and improved the search.
import java.util.Collection;
import java.util.Scanner;

public class Controller {
    private static Long key;

    Repository repository = new Repository();

    public void create_new_product() {
        Product product = new Product();
        Scanner scanner = new Scanner(System.in);

        System.out.println("*****************************************************************");
        System.out.println("********************NEW PRODUCT CREATION PAGE********************");
        System.out.println("*****************************************************************");
        System.out.println("Enter product id: ");
        long id = Long.parseLong(scanner.nextLine());
        product.setProductId(id);

        System.out.println("Enter product name: ");
        String name = scanner.nextLine();
        product.setProduct_name(name);

        System.out.println("Enter product brand: ");
        String brand = scanner.nextLine();
        product.setProduct_brand(brand);

        System.out.println("Enter product cost: ");
        int cost = scanner.nextInt();
        product.setProduct_cost(cost);

        System.out.println("Enter amount of products in stock: ");
        int amount = scanner.nextInt();
        product.setProduct_count(amount);

        repository.save_product(id, product);
    }

    public void search_product() {
        Scanner scanner = new Scanner(System.in);

        System.out.println("*****************************************************************");
        System.out.println("*************************FIND PRODUCT PAGE***********************");
        System.out.println("*****************************************************************");
        // TO DO: Choices or if/else blocks not executing properly
        System.out.println("\nSearch by ID or name?\nPress '1' for ID. Press '2' for name: ");
        String choice = scanner.next();
        if (choice.equals("1")) {
            System.out.println("Enter product id: ");
            Long id = scanner.nextLong();
            Product product = repository.find_product(id);

            try {
                if (product.getProduct_count() > 0) {
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } catch (Exception e) {
                System.out.println(product.getProduct_name() + " are out of stock.");
            }
        } else if (choice.equals("2")) {
            System.out.println("Enter product name: ");
            String name = scanner.next();
            Collection<Product> products = repository.find_products(name);

            if (products.size() > 0) {
                for (Product product : products) {
                    System.out.println(product.getProduct_name() + " are in stock!");
                }
            } else {
                System.out.println(" out of stock.");

            }
        } else {
            System.out.println("Error. We apologize for the inconvenience.");
        }
    }
}


//Added a new field to the Repository so you can also search by key.
import java.util.*;

public class Repository {
    private Map<Long, Product> product_repository = new HashMap<Long, Product>();

    // TO DO: Implement while loops so program doesn't exit at the first error

    public void save_product(Long key, Product newProductMap) {
        try {
            if (!product_repository.containsKey(key)) {
                product_repository.put(key, newProductMap);
            } else {
                System.out.println("This product is already in the system." +
                        "\nFor safety reasons, we cannot add the same product twice.");
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
    }

    public Product find_product(final Long key) {
        try {
            if (product_repository.containsKey(key)) {
                System.out.println("Found product: " + product_repository.get(key).getProduct_name());
                return product_repository.get(key);
            } else {
                System.out.println("No matches were found for product id: " + key);
            }
        } catch (Exception e) {
            System.out.println("System error. Consult the database administrator.");
        }
        return null;
    }

    // Overload
    public Collection<Product> find_products(final String name) {
        Collection<Product> values = new ArrayList<>();
        for (Map.Entry<Long, Product> productEntry : product_repository.entrySet()) {
            if (productEntry.getValue().getProduct_name().equals(name)) {
                System.out.println("matches were found for product name: " + name);
                values.add(productEntry.getValue());
            }
        }
        return values;
    }
}
//main保持不变
公共班机{
公共静态void main(字符串[]args){
//在这里编写代码
控制器=新控制器();
controller.create_new_product();
controller.search_product();
}
}
//控制器有点变了。添加了全局存储库并改进了搜索。
导入java.util.Collection;
导入java.util.Scanner;
公共类控制器{
私有静态长密钥;
Repository Repository=新存储库();
公共无效创建新产品(){
产品=新产品();
扫描仪=新的扫描仪(System.in);
System.out.println(“****************************************************************************************************************”);
System.out.println(“*************************新产品创建页面****************************”);
System.out.println(“****************************************************************************************************************”);
System.out.println(“输入产品id:”);
long id=long.parseLong(scanner.nextLine());
product.setProductId(id);
System.out.println(“输入产品名称:”);
字符串名称=scanner.nextLine();
产品。设置产品名称(名称);
System.out.println(“输入产品品牌:”);
String brand=scanner.nextLine();
产品。设置产品品牌(品牌);
System.out.println(“输入产品成本:”);
int cost=scanner.nextInt();
产品。设置产品成本(成本);
System.out.println(“输入库存产品数量:”);
int amount=scanner.nextInt();
产品。设置产品数量(金额);
存储库。保存产品(id、产品);
}
公共无效搜索_产品(){
扫描仪=新的扫描仪(System.in);
System.out.println(“****************************************************************************************************************”);
System.out.println(“****************************查找产品页*******************************”);
System.out.println(“****************************************************************************************************************”);
//要执行的操作:选项或if/else块未正确执行
System.out.println(“\n按ID或名称搜索?