2014-11-03 68 views
0

我正在編寫一個程序,其中包含許多用於賦值的方法,並且在其中一個方法中,我需要找到字符c以字符串s開頭的索引。例如:查找索引,其中char 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

爲什麼你'break'呢?只是擺脫它。 – wns349 2014-11-03 09:04:02

+0

刪除'break',你的代碼應該可以工作。 – Jens 2014-11-03 09:04:49

+1

爲什麼不使用[String.indexOf()](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String)) ? – 2014-11-03 09:04:56

回答

3

這一行:

if (s1.charAt(i) != c) { 

它是做什麼的?它看起來看這個角色是不是你要找的目標。所以在大多數情況下,這會觸發第一個字符。

接下來,您有一個break語句之前,你有你的return語句。請記住,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

漢克斯當它沒有發現你身邊的首次設立發現虛假和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 
1

我不認爲你需要斷言。這很早就讓你擺脫了for循環。

您應該能夠通過在boolean found聲明之前添加一個system.out.println來證明這一點,以追蹤您的索引是什麼。

1

試試這個

for (int i = 0; i < s1.length() - 1; i++) { 
    if (s1.charAt(i) == c) { 
     return i; 
    } 
} 
return -1;