Почему не вводятся элементы в договоренности моего собственного класса?

Я осуществляю класс, который я хочу, чтобы он вел себя как мешок имен, в которые он мог бы входить только, я они назвал, что они не были заблаговременно в мешке. Он дает мне неудачу, так как он не вводит мне имена в saco(Array). Звоня в мой собственный метод toString() он показывает мне все положения договоренности в NULL поскольку видят здесь:

Elemento de el array a Null

Моя стратегия - следующая посмотрим вы можете помогать мне объяснять мне, почему оно не функционирует правильно.

public void meter(String nombreIntroducir) {

    int i;
    if (contador==nombres.length) {
        agrandarArray();
    }

    for (i = 0; i < contador; i++) {

        if (!nombres[i].equalsIgnoreCase(nombreIntroducir)) {

                nombres[contador]=nombreIntroducir;
                contador++;
            }
        }
    }

Это контент метода agrandarArray()

private void agrandarArray() {
    String[] nuevaLista;
    int i;

    nuevaLista = new String[nombres.length + AUMENTO];

    for (i = 0; i < nombres.length; i++)
        nuevaLista[i] = nombres[i];

    nombres = nuevaLista;
}   

Метод toString()

public String toString(){

    String aux="";

    for (int i = 0; i < nombres.length; i++) {

        aux+=nombres[i]+",";
    }

    return aux;
}

0
задан 09.03.2016, 21:36
1 ответ

Уже я нашел проблему. Когда ты инициализируешь твой объект, переменную contador у него будет стоимость 0, и ты for в методе meter у него есть это условие:

for (i = 0; i < contador; i++)

Как contador хорошо! 0 и i хорошо! 0, условие i < contador возврати false и поэтому не регистрируется никакая информация.

Лучшее решение состоит в том, чтобы реализовывать начальное утверждение таким образом:

if (contador == 0) {
    nombres[contador++] = nombreIntroducir;
}

И потом, что за этим не последует приезжать в for следующего способа:

if (contador == 0) {
    nombres[contador++] = nombreIntroducir;
} else {
    for (i = 0; i < contador; i++) {
        if (!nombres[i].equalsIgnoreCase(nombreIntroducir)) {
                nombres[contador++] = nombreIntroducir;
                //una vez insertado el elemento, se debe romper el ciclo for
                //para evitar que el mismo elemento se esté duplicando durante la inserción
                break;
            }
        }
    }
}

У кода наверху есть большая ошибка: которую он обычно сравнивает с первым расположенным напротив текстом. То, чего требуют, состоит в том, чтобы проверять, что имя не существовало, и если это случай, тогда добавлять это. Способ это делать - используя метод поисков. Этот код был бы таким образом:

public boolean verificaExistencia(String nombre) {
    boolean resultado = false;
    for (int i = 0; i < contador; i++) {
        if (resultado = nombres[i].equalsIgnoreCase(nombre)) break;
    }
    return resultado;
}

public void meter(String nombreIntroducir) {
    if (contador==nombres.length) {
        agrandarArray();
    }
    if (!verificaExistencia(nombreIntroducir)) {
        nombres[contador++] = nombreIntroducir;
    }
}
2
ответ дан 24.11.2019, 14:45
  • 1
    Я понимаю твою логику верно и он имеет все чувство мира, но когда я тестирую твой код во ввиду исключения IndexOutOfBoundsException: 10 – Ricki 09.03.2016, 21:43
  • 2
    #191; Ты можешь размещать stacktrace в твоем комментарии? Чтобы это проверять и видеть d и # 243; nde последуй за проблемой. –  09.03.2016, 21:46
  • 3
    #39; Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Ejercicio1.SacoManoInocente.meter(SacoManoInocente.java:29) at Ejercicio1.MeH.main(MeH.java:14) – Ricki 09.03.2016, 21:54
  • 4
    Большое спасибо, совсем решенный извини из-за беспокойств и неправильной формулировки вопроса, он будет улучшен для предстоящей. – Ricki 09.03.2016, 22:12
  • 5
    Не беспокойся. Это был хороший ответ и хороший atenci и # 243; n, чтобы быть новым в сайте. Желанный, и что contin и # 250; это твой participaci и # 243; n:). В prop и # 243; расположенный, если этот ответ ты sirvi и # 243; не забывай принимать –  09.03.2016, 22:13