Почему мой массив не добавляет в него символы? - PullRequest
0 голосов
/ 09 июля 2020

Класс ниже имеет основной метод (сокращенный)

import javax.swing.*;

public class Hello
{
    public static void main(String[] args)
    {
    int size, command;
        char inputChar;
        String inputString;
    size = Integer.parseInt(JOptionPane.showInputDialog("Please enter a size for the array"));
    CharacterList list1 = new CharacterList(size);

    inputString = JOptionPane.showInputDialog("Please enter a character to add");
                    inputChar = inputString.charAt(0);
                    boolean added;

                    added = list1.addCharacter(inputChar);

                    if(added == true)
                    {
                        System.out.println(inputChar + " was added");
                    }
                    else
                    {
                        System.out.println(inputChar + " was not added");
                    }
}

Я хотел бы добавить символы, которые пользователь вводит в массив (размер задается пользователем). И, если размера недостаточно, я хочу удвоить размер и добавить копию всех предыдущих элементов массива в новый массив и назначить старый массив новому массиву (ссылка). Вывод: Размер массива: 3 a было добавлено [a,,,] b добавлено [a, b,] c добавлено [a, b,,,,]

public class CharacterList {

    private char [] charArray;
    private int count;

private void doubleArrayCapacity() {

        //create new array of char, which is double length
        char [] newCharArray = new char[this.charArray.length*2];
        //prescribe values from old array to new one
        for(int i=0; i<this.charArray.length-1; i++) {
            newCharArray[i] = this.charArray[i];
        }
        //set newCharArray set new value of your field charArray
        this.charArray = newCharArray;
    }
public int indexOf(char searchingChar) {

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

            if(charArray[i] == searchingChar){
                return i;
            }

        }
        return -1;

    }

public boolean addCharacter(char characterToAdd){

        if(indexOf(characterToAdd) == -1){

            if(count == charArray.length -1){
                doubleArrayCapacity();
            }

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

                if(charArray[i] == ' '){

                    charArray[i] = characterToAdd;
                    break;
                }
            }
            count++;
            return true;

        } else
            return false;

    }
}

класс выше имеет другой класс

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

Спасибо

1 Ответ

0 голосов
/ 09 июля 2020

Как написан ваш метод addCharacter, он требует, чтобы массив символов был заполнен пробелами ' '. Но doubleArrayCapacity не добавляет пробелов. Вы можете добавить пробелы с помощью al oop, например:

private void doubleArrayCapacity() {

    //create new array of char, which is double length
    char [] newCharArray = new char[this.charArray.length*2];
    //prescribe values from old array to new one
    for(int i=0; i<this.charArray.length-1; i++) {
        newCharArray[i] = this.charArray[i];
    }

    // FILL REST OF NEW ARRAY WITH WHITE SPACE
    for(int i=this.charArray.length; i < newCharArray.length; i++) {
        newCharArray[i] = ' ';
    }

    //set newCharArray set new value of your field charArray
    this.charArray = newCharArray;
}

Кстати, это поможет, если вы разместите полный исходный код, чтобы нам не приходилось гадать, какие конструкторы и методы делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...