如何通过LinkedList索引修改指定商品的数量?附实现逻辑
问题需求
仅修改LinkedList中指定索引位置的GroceryItem对象的count属性值为新整数,限制仅能在changeItemCount方法内部添加代码,不可修改其他代码。示例:将[green tea, 1]修改为[green tea, 2]。
需要实现的方法
public void changeItemCount(int k, int m){ }
GroceryList类
import java.util.LinkedList; import java.util.ListIterator; public class GroceryList { //该类用于创建包含GroceryItem列表的对象 //变量 private LinkedList<GroceryItem> glist; //存储GroceryItem //构造方法:初始化glist为空的购物列表 public GroceryList() { glist = new LinkedList<GroceryItem>(); } //返回glist中GroceryItem的数量 public int getSize() { return glist.size(); } //返回指定索引位置的GroceryItem public GroceryItem getItem(int k) { GroceryItem m = glist.get(k); return m; } //将GroceryItem x添加到glist末尾 public void addItem(GroceryItem x) { glist.add(x); } //移除glist中指定索引位置的项并返回 public GroceryItem removeItem(int k ) { return glist.remove(k); } //将glist中第k项的数量修改为m public void changeItemCount(int k, int m) { //需要在此处添加代码 } //该方法可直接使用 public void sortList( ) { glist.sort(null); System.out.println("Sorted GroceryList: " + glist); } }
GroceryItem类
public class GroceryItem implements Comparable<GroceryItem> { //该类用于创建商品对象及对应数量 //变量 private String name; //商品名称 private int count; //所需数量;确保count始终≥0 //构造方法:仅传入字符串时,默认数量设为1 public GroceryItem ( String s) { count = 1; name = s; } //构造方法:传入字符串和整数时,设置对应名称和数量 public GroceryItem ( String s , int initCount) { name = s; count = initCount; } //返回当前数量 public int getCount() { return count; } //设置数量为指定值 public void setCount(int m) { count = m; } //返回商品名称 public String getName() { return name; } //@Override public int compareTo(GroceryItem o) { if( name.compareTo(o.getName() ) < 0) //小于对比项 return -1; else if (name.compareTo(o.getName()) > 0) //大于对比项 return 1; else return( count - o.count); //名称相同时比较数量 } //toString方法:格式为[bananas, 3] public String toString() { name.toString(); String temp = Integer.toString(count); String formatt = name + ", " + temp ; return formatt; } }
GroceryListDriver测试类
public class GroceryListDriver { //该类用于测试另外两个类的方法 public static void main(String[] args) { // TODO Auto-generated method stub //创建10个GroceryItem对象 GroceryItem items1 = new GroceryItem("banana", 5); GroceryItem items2 = new GroceryItem("apples", 5); GroceryItem items3 = new GroceryItem("pea soup", 2); GroceryItem items4 = new GroceryItem("apples", 3); GroceryItem items5 = new GroceryItem("wheat bread", 2); GroceryItem items6 = new GroceryItem("tuna fish", 5); GroceryItem items7 = new GroceryItem("potatoes", 4); GroceryItem items8 = new GroceryItem("sourdough bread", 1); GroceryItem items9 = new GroceryItem("chedadar cheese", 1); GroceryItem items10 = new GroceryItem("green tea", 1); //创建名为groceryList的购物列表 GroceryList groceryList = new GroceryList(); //将商品添加到列表 groceryList.addItem(items1); groceryList.addItem(items2); groceryList.addItem(items3); groceryList.addItem(items4); groceryList.addItem(items5); groceryList.addItem(items6); groceryList.addItem(items7); groceryList.addItem(items8); groceryList.addItem(items9); groceryList.addItem(items10); //打印当前列表 //groceryList.printGroceryList(null); //对购物列表排序 //groceryList.sortList(); //将green tea的数量改为2 System.out.println(groceryList.getItem(9)); } }
实现方案
在changeItemCount方法中添加以下代码:
// 获取指定索引的商品对象 GroceryItem target = glist.get(k); // 调用setCount修改数量 target.setCount(m);
或者复用类中已有的getItem方法:
GroceryItem target = getItem(k); target.setCount(m);
实现逻辑
- 获取目标对象:通过LinkedList的
get(k)方法(或封装后的getItem(k))拿到指定索引的GroceryItem引用,因为LinkedList存储的是对象引用,所以操作该引用会直接修改列表中的原对象。 - 修改属性值:调用GroceryItem类提供的
setCount方法,将count属性更新为传入的新值m。
测试验证
在测试类的main方法中添加调用代码,验证修改效果:
// 将green tea的数量改为2 groceryList.changeItemCount(9, 2); System.out.println(groceryList.getItem(9)); // 输出应为 green tea, 2
内容的提问来源于stack exchange,提问作者user20010484
相关产品推荐
相关产品推荐

