Можно ли скрыть элемент в массиве, когда массив выводится на консоль?

#java #arrays #char

Вопрос:

Я изучаю язык Java, и прямо сейчас я занимаюсь небольшим проектом, который называется игрой в морской бой.

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

Комментарии:

1. Если у вас есть конкретные индексы, вы можете просто проверить, является ли это одним из них, прежде чем печатать?

2. Пожалуйста, для начала предоставьте свой исходный код. Лучше указать вам, где в вашем исходном коде что-то идет не так

3. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Быстрым и грязным решением было бы просто проверить, должен ли символ быть скрыт или нет при их распечатке:

 public static void main(String[] args)
{
    
    //your char array
    char[] charsArray = {'a', 'b', 'c', 'd', 'e'};
    //chars you want to hide
    char[] charsToHide = {'b', 'd'};
    
    //loop over you char array
    for (char myChar : charsArray)
    {
        
        //check if element is a char to hide
        if (containsChar(myChar, charsToHide) == false) 
        //if not, print it
        {System.out.print(myChar);}
        
    }
    
}

public static boolean containsChar(char myChar, char[] charsToHide)
{
    
    //loop over all chars to hide
    for (char charArrayElement : charsToHide)
    {
        
        //check if you char is part of chars to be hidden
        if (myChar == charArrayElement) {return true;} 
        
    }
    
    return false;
    
}
 

Ответ №2:

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

Хорошо…. допустим, у вас есть w int во вновь созданном массиве владельцев индексов. И ваш основной символ[] содержит n элементов. Если вы примените грубую силу, это будет стоить вам O(n * w) сложности. Примерно O(n^2) сложность. Таким образом, лучшим подходом было бы заполнение вспомогательного массива в порядке возрастания. А затем выполните двоичный поиск. Сложность будет тогда O(n * lgW). Другая оптимизация может произойти с использованием хэш-карты.