Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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
For with if语句java_Java_Arrays_If Statement_For Loop - Fatal编程技术网

For with if语句java

For with if语句java,java,arrays,if-statement,for-loop,Java,Arrays,If Statement,For Loop,我需要检查字符c索引在字符串上的位置,如果字符c不在那里,返回-1 public class Find { private String _st; int i; public Find(String st) { _st = st; } public int whatIstheIndex(char c) { for (i=0;i<_st.length();i++) if (_st.charAt

我需要检查字符c索引在字符串上的位置,如果字符c不在那里,返回-1

public class Find {
    private String _st;
    int i;

    public Find(String st) {
        _st = st;
    }

    public int whatIstheIndex(char c) {
        for (i=0;i<_st.length();i++)
            if (_st.charAt(i) == c) {
                return i;
            } else {
                return -1;
            }
        return i;
    }
}
公共类查找{
私人字符串(st);
int i;
公共查找(字符串st){
_st=st;
}
公共int Whatisteindex(字符c){

对于(i=0;i删除else子句,如果字符串中的第一个字符不正确,则返回-1


然后,您还需要更改方法末尾的return语句。

为什么不使用内置的
indexOf
方法呢?这比循环字符串并测试每个字符要简单、快速得多


但是,如果出于某种奇怪的原因必须使用此方法,请去掉
else
子句,因为它会使函数在每次测试的字符不匹配时返回-1。

发生的情况是它正在查看第一个字符,如果不匹配,它会立即返回-1(因此,在找到正确的字符之前,不会继续循环遍历字符)

只有在完成了
for的
循环且未找到字符时,才需要返回-1。因此,它必须是:

public int whatIstheIndex(char c) {
    for (i = 0; i < _st.length(); i++) {
        if (_st.charAt(i) == c) {
            return i;
        }
    }
    return -1;
}
public int whatisteindex(字符c){
对于(i=0;i<_.length();i++){
如果(_st.charAt(i)==c){
返回i;
}
}
返回-1;
}

您总是在查看第一个字符后返回。您的测试不会查看其他字符。调试器会向您显示这一点。仅当长度为0时才会调用最后一个
返回i

您的代码应该如下所示:

public int whatIstheIndex(char c) {

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

            if (_st.charAt(i) == c) {
                return i;
            } 

        return -1;

    }
public int whatisteindex(字符c){
对于(int i=0;i<_st.length();i++)
如果(_st.charAt(i)==c){
返回i;
} 
返回-1;
}

希望这有帮助!

为什么不使用
String.indexOf(int)
方法呢

public  int whatIstheIndex (char c) {
    return _st.indexOf(c);
}
否则,仅在循环完成后返回-1:

public  int whatIstheIndex (char c) {

    for (i=0;i<_st.length();i++)

        if (_st.charAt(i) == c )  {
           return i;
        }
    }

    return -1;
}
public int whatisteindex(字符c){

对于(i=0;i您当前的实现将只返回两个值中的一个,即0或-1。当第一个索引是字符所在的索引时,返回0;如果在其中找不到,则返回-1。删除else子句,并在完成for循环后返回-1,以指示您已彻底搜索了所有索引,但未找到答案。

这里有一个替代的解决方案,它同样有效

public int whatIstheIndex(char c) {
    int result = -1;
    for (int i = 0; i < _st.length(); i++) {
        if (_st.charAt(i) == c) {
            result = i;
        } 
    }
    return result;
}
public int whatisteindex(字符c){
int结果=-1;
对于(int i=0;i<_st.length();i++){
如果(_st.charAt(i)==c){
结果=i;
} 
}
返回结果;
}

这只是对这个问题的另一种思考方式。我想这有点“更糟”因为它添加了一行额外的代码,但我希望您了解它是如何工作的。

因为我需要使用一些有限的选项来完成这项工作……无论如何,谢谢您,我已经以Eclipse将自动执行的格式一致地重新插入了您的代码。如果您查看它,您现在可以看到循环中两个返回之间的二进制选择。猜猜它第一次在循环中做了什么?@Bside:你明白为什么这是你应该写的吗?老实说?在我发布这个问题10秒钟后,我成功地理解了问题所在。而且@Sandeep Jindal写的正是我所理解的。现在我正试着理解indexOf(string str):…老实说(2)…我在试着为考试而学习..我应该做作业,但不是必须做。我只想理解。太棒了…我在Stacoverflow上发布了一个问题-第二秒后就理解了。我也理解了indexOf(string str)。它被称为“橡皮鸭调试”()我想这个问题也没问题,至少在我看来是这样。