当数组打印到控制台时,是否可以隐藏数组中的元素?

Is it possible to hide an element in array when the array is printed to the console?

我正在学习Java语言,现在我正在做一个小项目,叫做战舰游戏。

问题:我想用特定索引中的随机字符填充一个 char 数组,但是当整个数组在控制台中打印时,这些字符不应该对用户可见,因为基于这些字符,用户将点击这些字符。

您可以创建另一个帮助程序数组来存储要从控制台隐藏的随机字符的索引。当您打印到控制台时,检查当前索引是否与您要从刚刚创建的用于存储索引的数组中隐藏的索引匹配。

好的....假设您在新创建的索引持有者数组中有 w int。你的主要 char[] 有 n 个元素。如果你使用蛮力,这将花费你 O(n * w) 复杂度。大约 O(n^2) 复杂度。因此,更好的方法是您应该按升序填充辅助数组。然后进行二分查找。那么复杂度就是 O(n * lgW)。可以使用哈希图进行另一项优化。

一个快速而肮脏的解决方案是在打印时检查字符是否应该被隐藏:

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