2014-11-13 3 views
-1

Я пытаюсь добавить некоторые объекты (servei) в этот код, а новый всегда перезаписывает последний, и я не могу найти ошибку: /, у меня есть две точки p и i, Я использую i для массива только при удалении объектов llista [p], потому что я не хочу нулевые значения внутри моего массива, я добавил код, когда я использую e, и servicei, потому что некоторые люди говорят, что может быть и ошибка ,Значение массива переписывается каждый раз, когда java

System.out.println (llista.afegirServei (serv)); // это то, что я использую, чтобы добавить новый Servei

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; 
      } 
     } 
    } 

} 
+2

Проклятие иностранного языка: я не могу прочитать ваш код и, следовательно, не догадываться, что вы хотите сделать. Вы должны сказать нам. – Dawnkeeper

+4

Вы можете сначала исправить свой код. Использование переменной i, похоже, испортилось. – 6ton

+0

является 'p' incrementing? Обычно мне нравится присваивать значения в конструкторе. – Fallenreaper

ответ

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); 
+0

, который я пытался с булевым раньше, но это университетский проект, t использовать его (учитель говорит, что есть побочные проблемы или что-то в этом роде) и не может использовать коллекции или даже arraylist, так что это немного осложняет мне ... – Ulrok

+0

наконец-то работает с решением, которое я редактировал в последний раз, спасибо вам все равно – Ulrok

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; 
     } 
+0

Я думаю, что это было бы более уместно в качестве редактирования исходного вопроса. –

+3

Вы правы, это была моя первая мысль. Но «слишком долго на 295 символов». Поскольку это никому не повредит и улучшает читаемость вопроса, я думаю, что все в порядке. – JacksOnF1re

+0

Я не знал об ограничении длины при редактировании исходного вопроса. Интересно. В этом случае я полностью согласен. –

0

Я думаю, что, учитывая недостатки некоторых } и значение i в AfegirServei отсутствует, вы сократить свой исходный код и поместить то, что вы считаете, что это необходимо, чтобы понять проблему. Я уверен, что проблема заключается в параметре servei, когда вы звоните public String AfegirServei(Servei servei). Очень возможно, что вы передаете неправильный объект или что-то в этом роде. Конечно, я могу быть уверен, что только я вижу полный исходный код.

+0

Я использую eclipse, поэтому отсутствие} не является проблемой ... и код Servei уже был дан и реализован, кстати, реальная проблема заключается в том, что когда я добавляю «Servei», он перезаписывает последний каждый раз , поэтому у меня всегда есть 1 значение внутри массива, в котором содержится больше одного. – Ulrok

+0

, наконец, работает с решением, которое я редактировал в последний раз, спасибо вам в любом случае – Ulrok

Смежные вопросы