gpt4 book ai didi

java - 如何通过键盘输入从 HashMap 中删除项目?

转载 作者:行者123 更新时间:2023-12-01 18:40:36 26 4
gpt4 key购买 nike

我的问题是 deleteEntry 方法(倒数第二个方法)。我希望能够通过扫描仪输入一个整数,该整数的位置将从 HashMap 中删除。因此,如果我在 HashMap 中有 5 个对象,并在删除方法中输入 3,则应该删除第三个条目。我怎样才能做到这一点?

import java.util.*;
public class ShoppingList
{
private HashMap<String, Integer> list;
private Scanner sc;
private int input;
private String article;
private int number;
private int index;
private int value;

public ShoppingList()
{
list = new HashMap<>();
sc = new Scanner(System.in);
article = null;
number = 1;
}


public void menue(){
do{
System.out.println("___________________________________________________");
System.out.println("1. Add Entry");
System.out.println("2. Show List");
System.out.println("3. Delete Entry");
System.out.println("4. Delete List");
System.out.println("0. Exit");
System.out.println("___________________________________________________");

input = sc.nextInt();

switch (input){
case 1:
addEntry(); break;
case 2:
showList(); break;
case 3:
deleteEntry(); break;
case 4:
deleteList(); break;
default:
System.out.println("Exit"); break;
}
}
while (input != 0);
}

public void addEntry(){

System.out.println("Add Entry: ");
article = sc.next();

System.out.println("Number: ");
number = sc.nextInt();
list.put(article, number);
}

public void showList(){
Iterator <String> it = list.keySet().iterator();
for (String key : list.keySet()){
System.out.println(key + ": " + list.get(key));
}
}

public void deleteEntry(){
System.out.println("Number of item you want to remove:");

index = sc.nextInt();
index = index--;
value = list.get(index);
list.remove(value);
}

public void deleteList(){
list.clear();
}
}

最佳答案

购物 list 中的每件商品不仅是产品名称,而且还包括该产品的数量。有一天(假设)您可能会向每个列表项添加其他属性,例如允许的最高价格或您库存该产品的销售价格。

因此,创建一个专门的类型来表示列表项。您正尝试使用映射条目来实现此目的,但在面向对象的语言中,您有更强大的选项。

将您的项目保留在列表中,因为顺序很重要。

class ShoppingItem {
private final String name;
private final int quantity;
ShoppingItem(String name, int quantity) {
this.name = Objects.requireNonNull(name);
if (quantity < 1) throw new IllegalArgumentException();
this.quantity = quantity;
}
String getName() { return name; }
int getQuantity() { return quantity; }
}

修改您当前的类以使用 List<ShoppingItem> :

public class ShoppingList {

private List<ShoppingItem> list = new LinkedList<>();

public void addEntry(){
System.out.println("Add Entry: ");
String article = sc.next();
System.out.println("Number: ");
int number = sc.nextInt();
list.add(new ShoppingItem(article, number);
}

public void deleteEntry(){
System.out.println("Number of item you want to remove:");
int number = sc.nextInt();
list.remove(number - 1);
}

public void showList(){
for (ShoppingItem item : list) {
System.out.printf("%s: %d%n", item.getName(), item.getQuantity());
}
}

... /* Etc. */

另请注意,大多数类变量作为本地变量会更好,因为分配给它们的值仅在方法范围内才有意义。

关于java - 如何通过键盘输入从 HashMap 中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com