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

调用inserimentoVoto方法向Studente对象列表添加元素时数据被覆盖

解决每次调用inserimentoVoto时成绩被覆盖的问题

嘿,我刚看了你的问题,你遇到的这个覆盖问题其实很常见,尤其是刚接触Java集合的时候😉 咱们一步步来排查和解决:

核心问题分析

你说每次调用inserimentoVoto方法,Studente里的列表元素都会被覆盖,大概率是下面两个原因之一:

  1. 你的Studente类里没有用列表存储成绩,而是用了单个Voto对象变量(比如private Voto voto;),每次调用方法都会替换这个变量的引用,自然就覆盖了之前的数据。
  2. 即使有列表,但你没有正确往列表里添加新元素,反而可能每次都重新初始化列表,或者直接替换了列表本身。

第一步:修正Studente类的结构

首先确保Studente类里有一个初始化好的列表来存储多个成绩,代码示例如下:

import java.util.ArrayList;
import java.util.List;

public class Studente {
    // 初始化一个空的成绩列表,避免空指针异常
    private List<Voto> votiList = new ArrayList<>();

    // 提供获取列表的方法,方便外部添加元素
    public List<Voto> getVotiList() {
        return votiList;
    }
}

第二步:修正inserimentoVoto方法

接下来修改inserimentoVoto方法,确保你把新创建的Voto对象添加到Studente的列表中,而不是覆盖某个单一变量:

import java.util.Scanner;

public class Gestione {
    private Scanner scanner = new Scanner(System.in);

    public void inserimentoVoto(Studente s) { 
        Voto v = new Voto(); 
        System.out.println("Insert value"); 
        v.setVoto(scanner.next()); 
        System.out.println("Insert subject name"); 
        v.setMateria(scanner.next()); // 假设Voto类有setMateria方法来设置科目

        // 关键:把新创建的成绩对象添加到学生的成绩列表里
        s.getVotiList().add(v);
    }
}

第三步:验证效果

在main方法里多次调用inserimentoVoto,然后打印学生的成绩列表,确认所有成绩都被保留:

public class Run { 
    public static void main(String[] args) { 
        Gestione g = new Gestione(); 
        Studente s = new Studente(); 

        // 添加两次成绩
        g.inserimentoVoto(s);
        g.inserimentoVoto(s);

        // 遍历打印所有成绩
        for (Voto voto : s.getVotiList()) {
            System.out.println("科目:" + voto.getMateria() + ",成绩:" + voto.getVoto());
        }
    } 
}

为什么之前会覆盖?

如果之前你的Studente类里是单个Voto变量,每次调用inserimentoVoto时用setVoto方法赋值,那新的Voto对象会替换掉旧的引用,就会出现覆盖的情况。而用列表的add方法是往集合里追加新元素,不会影响已有的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:13:02