For with if语句java
我需要检查字符c索引在字符串上的位置,如果字符c不在那里,返回-1For 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
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)。它被称为“橡皮鸭调试”()我想这个问题也没问题,至少在我看来是这样。