You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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);

实现逻辑

  1. 获取目标对象:通过LinkedList的get(k)方法(或封装后的getItem(k))拿到指定索引的GroceryItem引用,因为LinkedList存储的是对象引用,所以操作该引用会直接修改列表中的原对象。
  2. 修改属性值:调用GroceryItem类提供的setCount方法,将count属性更新为传入的新值m。

测试验证

在测试类的main方法中添加调用代码,验证修改效果:

// 将green tea的数量改为2
groceryList.changeItemCount(9, 2);
System.out.println(groceryList.getItem(9)); // 输出应为 green tea, 2

内容的提问来源于stack exchange,提问作者user20010484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:31:34