我正在编写一个包含许多赋值方法的程序,在其中一个方法中,我需要找到字符c在字符串s中开始的索引。例如:
IN: sheep, h
OUT: 1
我已经完成了这个方法但是有两个字符串而不是一个字符串和一个字符
public static int findInStr1(String s1, String s2) {
for (int i = 0; i < s1.length() - s2.length(); i++) {
boolean found = true;
for (int j = 0; j < s2.length(); j++) {
if (s1.charAt(i) != s2.charAt(j)) {
found = false;
break;
}
}
if (found) {
return i;
}
}
return -1;
}
我尝试移动一些东西使其使用char而不是第二个字符串
public static int findInStr2(String s1, char c) {
for (int i = 0; i < s1.length() - 1; i++) {
boolean found = true;
if (s1.charAt(i) != c) {
found = false;
break;
}
if (found) {
return i;
}
}
return -1;
}
但无论输入
,它总是返回-1提前致谢
答案 0 :(得分:3)
这一行:
if (s1.charAt(i) != c) {
它做什么?它会查看角色是否不是您正在寻找的目标。所以在大多数情况下,这会触发第一个角色。
接下来,在有return语句之前,你有一个break语句。请记住,break仅适用于循环,而不适用于if语句。如果找到它,请不要使用找到的变量。只需在那时返回索引。
if (s1.charAt(i) == c) {
return i;
}
最后,你有这个条件:
for (int i = 0; i < s1.length() - 1; i++)
你必须挑选一个或另一个。使用<= s1.length() - 1
或使用< s1.length()
。如果你两个都做,你会错过最后一个角色。所以当"sheep", 'p'
返回4时,{{1}}没有找到。
答案 1 :(得分:1)
如果第一次找不到它,则设置为false并break
,注意:break
突破整个循环而不是if语句,因此 - 返回1
尝试编写更紧凑,更简单的代码,下面的代码完全符合您的要求,
import java.util.*;
public class Found{
public static int findInStr2(String s1, char c) {
for (int i = 0; i < s1.length(); i++)
{
if (s1.charAt(i)==c)
{
return i;
}
}
return -1;
}
public static void main(String[] args)
{
Found f=new Found();
int pos=Found.findInStr2("Hello",'o');
System.out.println("found at position"+(pos+1));
}//main ends
}//class ends
答案 2 :(得分:1)
我认为你不需要休息声明。这会让你早早摆脱for循环。
您应该能够通过在boolean found声明之前添加system.out.println来跟踪索引是什么来证明这一点。
答案 3 :(得分:1)
试试这个
for (int i = 0; i < s1.length() - 1; i++) {
if (s1.charAt(i) == c) {
return i;
}
}
return -1;