Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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中查找第一个无重复字符时出错_Java_Algorithm_Loops_Char - Fatal编程技术网

在Java中查找第一个无重复字符时出错

在Java中查找第一个无重复字符时出错,java,algorithm,loops,char,Java,Algorithm,Loops,Char,我有一个奇怪的问题,打印字符串中的第一个非重复字符 如果我把例如“sasso”作为字符串,它会正确地返回:“a” 但如果我尝试使用“sassa”,我想知道为什么它会回复我:“s” 公共类FirstChar{ 公共字符findFirst(字符串s){ 布尔[]字母=新布尔[26]; char[]firstLetter=新字符[26]; 对于(int i=0;i

我有一个奇怪的问题,打印字符串中的第一个非重复字符

如果我把例如“sasso”作为字符串,它会正确地返回:“a”

但如果我尝试使用“sassa”,我想知道为什么它会回复我:“s”

公共类FirstChar{
公共字符findFirst(字符串s){
布尔[]字母=新布尔[26];
char[]firstLetter=新字符[26];
对于(int i=0;i

}

您需要确保firstLetter充当非重复字符的队列,并在遇到重复字符时将其从队列中删除。您总是在第0或第1位置返回字符,而不覆盖第一个字母数组元素。 如果是
sassa
,当遇到最后一个字符
a
时,first
if
中的条件求值为true,从而返回存储在firstLetter数组中的第一个字符
s

对于
“sassa”
,您需要HashMap和Queue来实现这一点,您期望得到什么?您知道返回的是
字符中的哪一个吗?您是否尝试过在调试器中逐行遍历代码?也许你应该?我想:“a”是第一个不重复的字符,所以“重复”是指“连续重复”?您仍然应该尝试在调试器中单步执行代码,以查看它的功能。如果@Someprogrammerdude,则在两个测试用例中都应该是“s”时“连续重复”是正确的。除了这里的问题之外,此方法中还有一些问题。只要没有重复的字符,您总是得到第二个字符。所以“soup”返回“o”。“abcdefghijklmnop”返回“b”。只要有一个重复的字符,你总是得到第一个字符。所以“abcdefgghijklmnop”返回“a”。“aaabcdefgghijklmnop”也返回“a”,即使“a”在重复。逐步完成代码并仔细评估它正在做什么以及您期望它做什么。您是对的!我想对我来说是时候开始研究这些收藏品了。
public class FirstChar {

public char findFirst(String s) {

    boolean[] letters = new boolean[26];
    char[] firstLetter = new char[26];

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

        if (letters[s.charAt(i) - 97] && 
                (firstLetter[0] != (s.charAt(i)))) {

            System.out.println( firstLetter[0]);
            return firstLetter[0];          
        }
        letters[s.charAt(i) - 97] = true;
        char c = (char) (s.charAt(i));
        firstLetter[i] = c;
    }
    System.out.println(firstLetter[1]);
    return firstLetter[1];
}
public static void main(String args[]) {
    FirstChar obj = new FirstChar();
    obj.findFirst("sassa");
}