2015-04-12 332 views
0

我在我的if else語句中遇到了問題。如果 - else語句

String[] keywords = { "day", "What book", "office", "hour", 
      "e-mail" }; 

    Scanner scanner = new Scanner(System.in); 
    String input = null; 
    /* -end init- */ 

    System.out.println("Welcome "); 
    System.out.println("What's on your mind?"); 
    do { 
     System.out.print("> "); 
     input = scanner.nextLine().toLowerCase(); 
     for (String keyword : keywords) { 

      if (input.contains(keyword)) { 
       parseFile(keyword); 

      } 

      else { 
       Writer(); 

      } 
     } 
     break; 
    } while (input.equalsIgnoreCase("bye")); 
    System.out.println("Have a good day!"); 

} 
} 

由於某種原因,第一個IF語句被忽略。有人可以給我一些建議。謝謝

+0

你的輸入是什麼?什麼是關鍵字?它不是「被忽略」,它可能總是「錯誤的」 –

+0

@OriLentz第二個執行。這意味着它並不總是假的。 – CKing

+0

可能有兩個原因,要麼控制沒有進入for循環,要麼if中提到的條件是false,需要更多的代碼來了解 –

回答

1

我試着運行該程序,它運行良好。如果假設我輸入了day作爲輸入。然後它進入if一次和其他內部(關鍵字-1的長度)時間。請檢查您是否輸入了與關鍵字數組中給定的值相同的值。

package myApp; 

import java.util.Scanner; 

public class Client{ 
    public static void main(String[] args) { 
     String[] keywords = { "day", "Cs 377", "What book", "office", "hour", 
       "e-mail", "name", "major", "student e-mail", "group id", 
       "lectures", "lecture room", "lecture time", 
       "number of lectures", "current lecture", 
       "topics of current lecture", "number of test", 
       "date of a test", "number of assignments", "sure", 
       "current assignment", "due day" }; 

     Scanner scanner = new Scanner(System.in); 
     String input = null; 
     /* -end init- */ 

     System.out.println("Welcome "); 
     System.out.println("What's on your mind?"); 
     do { 
      System.out.print("> "); 
      input = scanner.nextLine().toLowerCase(); 
      for (String keyword : keywords) { 

       if (input.contains(keyword)) { 
        System.out.println("KEYWORD:" + keyword); 
        break; 
       } 

       else { 
        System.out.println("KEYWORD not found"); 

       } 
      } 
      break; 
     } while (input.equalsIgnoreCase("bye")); 
     System.out.println("Have a good day!"); 

    } 
} 

我更換了一些東西里面,如果和其他與sysout。 我在輸入一天輸入並得到以下結果。

Welcome 
What's on your mind? 
> day 
KEYWORD:day 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
KEYWORD not found 
Have a good day! 

這個輸出很好理解。如果您覺得困難,請在下面評論您所面臨的問題。

+0

我的問題是一次循環。如果發現一天,打印日之後再度過一個美好的一天。沒有找到其他日期sysout關鍵字未找到 – ONSight

+0

因此,在for循環中只有一個「If」語句並且在for循環外有另一個if語句來檢查是否找不到?例如\t(字符串關鍵字:關鍵字){ \t \t \t \t found = true; \t \t \t \t如果(input.contains(關鍵字)){ \t \t \t \t \t parseFile(關鍵字); \t \t \t \t \t // break; \t \t \t \t} \t \t \t} \t \t \t \t如果(找到了!){ \t \t \t \t \t作家(); \t \t \t \t // break; \t \t \t \t} – ONSight

+0

只是在循環的條件下放了一個break。 –

2

使用map會減少整個數組的循環,每次檢查是否。

+0

好吧,所以我是新來的這個,如何地圖會使這更容易嗎? – ONSight

+0

我錯過了我認爲你在數組中搜索一個單詞的邏輯,但是你正在檢查數組中的任何世界是否匹配用戶輸入,注意HashMap提供了基本操作的恆定性能(get和put )。 – pssh