Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较两个长度不同的字符串,并仅为1个无效字符返回false? public boolean setValidColor(字符串输入,字符串颜色){ int存在; isValidColor=true; char[]colorch=colors.toCharArray(); Arrays.sort(colorch); 对于(int i=0;i_Java - Fatal编程技术网

Java 如何比较两个长度不同的字符串,并仅为1个无效字符返回false? public boolean setValidColor(字符串输入,字符串颜色){ int存在; isValidColor=true; char[]colorch=colors.toCharArray(); Arrays.sort(colorch); 对于(int i=0;i

Java 如何比较两个长度不同的字符串,并仅为1个无效字符返回false? public boolean setValidColor(字符串输入,字符串颜色){ int存在; isValidColor=true; char[]colorch=colors.toCharArray(); Arrays.sort(colorch); 对于(int i=0;i,java,Java,我在比较两个不同长度的字符串时遇到问题,并且仅在一个无效输入的实例上返回false 例如: 可能的颜色为RGOPYB,输入颜色为YZOR。“Z”是不可能的,我需要代码返回false,但代码一直返回true。我哪里做错了 编辑:这段代码不仅仅是这个(执行OOP),这只是一个我一直遇到问题的方法。数组。如果搜索的值应该插入到位置0,binarySearch将只返回-1。对于未找到的其他值,它将返回其他负值。测试exist

我在比较两个不同长度的字符串时遇到问题,并且仅在一个无效输入的实例上返回false

例如: 可能的颜色为RGOPYB,输入颜色为YZOR。“Z”是不可能的,我需要代码返回false,但代码一直返回true。我哪里做错了


编辑:这段代码不仅仅是这个(执行OOP),这只是一个我一直遇到问题的方法。

数组。如果搜索的值应该插入到位置0,binarySearch
将只返回-1。对于未找到的其他值,它将返回其他负值。测试
exist<0
而不是
exists===-1
数组。如果要搜索的值应插入位置0,则binarySearch
仅返回-1。对于未找到的其他值,它将返回其他负值。从java.util.Arrays测试
exist<0
而不是
exists==-1

: 搜索键的索引(如果它包含在数组中);否则,((插入点)-1)。 意味着你的情况应该是:

if(存在<0)
从java.util.Arrays: 搜索键的索引(如果它包含在数组中);否则,((插入点)-1)。 意味着你的情况应该是:

if(存在<0)

我认为特德·霍普发现了你的问题


我只想指出,您当前的方法(排序和使用二进制搜索)可能比使用
colors.indexOf(input.charAt(I))
的简单
O(N^2)
算法要慢得多。您可以通过“提升”已排序字符数组的创建来改进。(或者可能只需要将
颜色
字符串作为先决条件进行排序。)但即使进行了此更改,如果颜色数组足够小,则
索引
方法仍会更快

这一点的寓意是,如果不包含预期数据的现实特征,优化(尤其是过早优化)可能会使情况变得更糟


(现在可能“RGOPYB”并不表示实际的颜色数量。但如果是这样,你应该告诉我们…

我认为Ted Hopp发现了你的问题


我只想指出,您当前的方法(排序和使用二进制搜索)可能比使用
colors.indexOf(input.charAt(I))
的简单
O(N^2)
算法要慢得多。您可以通过“提升”已排序字符数组的创建来改进。(或者可能只需要将
颜色
字符串作为先决条件进行排序。)但即使进行了此更改,如果颜色数组足够小,则
索引
方法仍会更快

这一点的寓意是,如果不包含预期数据的现实特征,优化(尤其是过早优化)可能会使情况变得更糟


(现在可能“RGOPYB”并不表示实际的颜色数量。但如果是这样,您应该告诉我们…

您可能希望将其转换为列表。然后可以使用Retainal或removeAll,查看列表是否为空/相同

比如:

   if(exists < 0)

您可能希望将其转换为列表。然后可以使用Retainal或removeAll,查看列表是否为空/相同

比如:

   if(exists < 0)

你能把这句话改成。。。有道理吗?将
String
s与
String.equals()进行比较。。。看起来你正在尝试做一些与之非常不同的事情。你把这个复杂化了…我相信他把字符串当作一个字符集,所以顺序并不重要。我认为你可以用一个regexp在1-2行中完成这项工作,如果它只是检查有效性的话。我尝试了不同的比较方法。我已经做了嵌套for循环来比较这两个字符串,并且尝试了一个while循环。我的代码是我最近的一个。你能把它改成。。。有道理吗?将
String
s与
String.equals()进行比较。。。看起来你正在尝试做一些与之非常不同的事情。你把这个复杂化了…我相信他把字符串当作一个字符集,所以顺序并不重要。我认为你可以用一个regexp在1-2行中完成这项工作,如果它只是检查有效性的话。我尝试了不同的比较方法。我已经做了嵌套for循环来比较这两个字符串,并且尝试了一个while循环。我拥有的代码是我拥有的最新代码。所以我试着这么做。我没有提到这一点,但必须满足更多的条件。对于我正在做的事情,我从可能的列表中随机生成了一个4个字母的字符,并且我的输入必须是一个可能的字符,如果它与4个字母的列表匹配,则为真。假设我必须将我的输入BORG与BORG进行比较,并确保列表中包含有效字符。如果你只处理四个字母的测试,那么二进制搜索就太过分了。只需在方法中使用类似的内容:
for(int i=input.length()-1;i>=0;--i)if(colors.indexOf(input.charAt(i))=-1)返回false;返回true List validInput=   input.retainAll(colors);
if(validInput.equals(input)) {
 return true;
} 
return false;