我正在学习Java语言,现在我正在做一个叫做战舰游戏的小项目。
问题:我想用一个特定索引中的随机字符填充一个字符数组,但是当整个数组在控制台中打印时,这些字符不应该对用户可见,因为基于这些字符,用户将点击这些字符。
一个快速的解决方案是在打印时检查字符是否应该隐藏:
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;
}
您可以创建另一个helper数组来存储您希望在控制台隐藏的随机字符的索引。当您打印到控制台时,检查当前索引是否与您想要从刚刚创建的用于存储索引的数组中隐藏的索引匹配。
好吧…假设在新创建的索引持有数组中有一个wint。主char[]有n个元素。如果你使用蛮力,这将耗费你O(n * w)的复杂度。复杂度大概是O(n^2)因此,更好的方法是按升序填充helper数组。然后进行二分查找。复杂度为O(n * lgW)。使用hashmap可以实现另一种优化。