每次java都会覆盖数组值

时间:2014-11-13 20:24:58

标签: java arrays overwrite

我尝试在这段代码中添加一些对象(servei),新的一个总是覆盖最后一个,我找不到错误:/,我有两个点p和i,我只使用i作为数组当删除llista [p]对象时,因为我不希望我的数组中有空值,我添加了代码,当我使用e时,并且服务因为有些人说也可能有错误。

的System.out.println(llista.afegirServei(SERV)); //这就是我用来添加新服务的方法

public class Llistaservei {
    private int i;
    private Servei[] llista;
    private int p = 0;
    private float opinio;

    public Llistaservei(int Max_Serv) {
        llista = new Servei[Max_Serv]; 
    }

    public String AfegirServei(Servei servei) {
        if (ValidServei(servei.getNom()) == i) {
            return ("El servei ja existeix"); //if exist return that "servei" exist.
        } else { ***//finally works cleaning eclipse cache...***
                llista[p]=servei;
            p++;
            return ("El servei s'ha creat correctament");// I add a new "Servei to the array" if doesn't exist
        }
    }

    public String EliminarServei(String nom){
    if(ValidServei(nom)==-1){
        llista[i]=llista[p];    //here i use 2 pointers p,i cause i don't want null 
        llista[p]=null;         //in the middle of the array
        p--;
        return ("El servei s'ha eliminat correctament"); //if is valid 
    }                                                    //return "servei" deleted

    public int ValidServei(String nom) {
        for (i = 0; ((i < p) && (i < llista.length)); i++) {
            if (nom.equalsIgnoreCase(llista[i].getNom())) {
                return i;
            }
        }
    }

}

3 个答案:

答案 0 :(得分:4)

由于ValidServei返回i并分享i,您的方法将始终返回i与此匹配的值 -

if (ValidServei(servei.getNom())==i){

相反,你可以写一个contains喜欢,

public boolean contains(String nom) {
    for (int i = 0; i < p && i < llista.length; i++) {
        if (nom.equalsIgnoreCase(llista[i].getNom())) {
            return true;
        }
    }
    return false;
}

Java方法名称按惯例以小写字母开头。像,

public String afegirServei(Servei servei) {
    if (contains(servei.getNom())) {
        return ("El servei ja existeix");
    }
    llista[p++] = servei;
    return ("El servei s'ha creat correctament");
}

最后,您可能应该使用Set<Servei>集合(而不是数组),例如

Set<Servei> set = new HashSet<>();
set.add(servei);

答案 1 :(得分:0)

我无法编辑,所以这是翻译后的代码。 这只是社区能够阅读 你的问题,因为你似乎没有在问题中改变你的代码。

public class ServiceList {
private int i;
private Service[] list;
private int p = 0;
private float opinion;

public ServiceList(int maxServer)
{
    list = new Service[maxServer];
}

public String addService(Service service){

    if(chooseService(service.getName()) == i){
        return("The service already exists");
    }
    else
    {
        list[p]=service;
        p++;
        return("The service was successfully created");
    }   

public int chooseService(String name){
    for(i=0; ((i<p) && (i<list.length)); i++){
        if(name.equalsIgnoreCase(list[i].getname())){
            return i;
        }

答案 2 :(得分:0)

我猜是这样的,考虑到缺少某些}并且i中的AfegirServei的值缺失了,你就会削减你的源代码并放入你认为的那个有必要了解这个问题。当您致电servei时,我很确定问题出在参数public String AfegirServei(Servei servei)中。你很可能传递了错误的对象或类似的东西。当然,我可以确定只看到完整的源代码。