2015-04-12 3 views
0

У меня возникла проблема с моей логикой в ​​операторах if if else.Заявления if 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

Что такое 'input' и какие' ключевые слова'? Он не «проигнорирован», вероятно, всегда всегда «false» –

+0

@OriLentz. Второй, если выполняется. Это означает, что это не всегда неверно. – CKing

+0

может быть две причины: либо элемент управления не попадает внутрь цикла for, либо условие, указанное в if, является ложным, нужно еще немного кода для понимания –

ответ

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!"); 

    } 
} 

Я заменил несколько вещей внутри if и else 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

. Было бы логичным иметь только один оператор «If» внутри цикла for и иметь другой оператор if вне цикла for, который проверяет, не найден ли найденный? Например, \t для (ключевое слово String: ключевые слова) { \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 Writer(); \t \t \t \t // break; \t \t \t \t} – ONSight

+0

просто положил перерыв внутри для цикла, если условие. –

2

Использование карты уменьшит цикл для целых массивов за каждый раз, чтобы проверить, если.

+0

Итак, я новичок в этом, How облегчит ли карта? – ONSight

+0

Я пропустил логику, я думал, что вы ищете одно слово в массиве, но вы проверяете, соответствует ли какой-либо мир в массиве против ввода пользователя, на стороне примечания. HashMap обеспечивает постоянную производительность для основных операций (get and put). – pssh

Смежные вопросы