2015-04-29 2 views
-1

Я пытаюсь найти ключевое слово в текстовом файле и вернуть предложение, если оно найдено. Если ключевое слово не найдено, я хочу вызвать метод Writer. Но по какой-то причине метод Writer всегда работает.Проблемы с выражением if

Что нужно изменить, чтобы гарантировать, что метод writer вызывается только в том случае, если ключевое слово не найдено?

Вот мой код

private static HashMap<String, String[]> populateSynonymMap() { 
    responses.put("professor", new String[]{"instructor", "teacher", "mentor"}); 
    responses.put("book", new String[]{"script", "text", "portfolio"}); 
    responses.put("office", new String[]{"room", "post", "place"}); 
    responses.put("day", new String[]{"time", "date"}); 
    responses.put("asssignment", new String[]{"homework", "current assignment "}); 
    responses.put("major", new String[]{"discipline", "focus"," study"}); 


    return responses; 
} 

Вот мой основной метод и Writer Метод

public static void main(String args[]) throws ParseException, IOException { 
    /* Initialization */ 
    HashMap<String, String[]> synonymMap = new HashMap<String, String[]>(); 
    synonymMap= populateSynonymMap(); //populate the map 

    Scanner in = new Scanner(System.in); 
    Scanner scanner = new Scanner(System.in); 
    String input = null; 

    System.out.println("Welcome To DataBase "); 
    System.out.println("What would you like to know?"); 

    System.out.print("> "); 
    input = scanner.nextLine().toLowerCase();   
    String[] inputs = input.split(" "); 

    boolean found = false; 
    for(String ing : inputs){ //iterate over each word of the sentence. 
     for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) { 
      String key = entry.getKey(); 
      String[] value = entry.getValue(); 
      if (key.equals(ing) || Arrays.asList(value).contains(ing)) { 

        found = true; 
        parseFile(entry.getKey()); 

        System.out.println(" Would you like to update this information ? "); 
       String yellow = in.nextLine(); 
       if (yellow.equals("yes")) { 
        removedata(entry.getKey()); 
       } 
       if (yellow.equals("no")) { 
        System.out.println("Have a good day"); 
        break; 
       } 


        break; 
        //System.out.println("Have a good day!"); 
        // break; 
      } 
     } 
     if(found){ 
      Writer(); 
     } 
    } 
} 
} 


public static void Writer() { 
    boolean endofloop = false; 
    Scanner Keyboard = new Scanner(System.in); 
    Scanner input = new Scanner(System.in); 

    File file = new File("data.txt"); 
    try (BufferedWriter wr = new BufferedWriter(new FileWriter(
      file.getAbsoluteFile(), true))) { // Creates a writer object 
               // called wr 
               // file.getabsolutefile 
               // takes the filename and 
               // keeps on storing the old 
     System.out.println("I do not know, Perhaps you wanna help me learn?"); // data 
     while ((Keyboard.hasNext())) { 

      String lines = Keyboard.nextLine(); 
      System.out.print(" is this correct ? "); 
      String go = input.nextLine(); 

      if (go.equals("no")) { 
       System.out.println("enter what you want to teach me"); 
       lines = Keyboard.nextLine(); 
       System.out.print(" is this correct ? "); 
       go = input.nextLine(); 
      } 

      if (go.equals("yes")) { 
       wr.write(lines); 
       wr.write("\n"); 

       wr.newLine(); 

       wr.close(); 
      } 

      System.out.println("Thankk you"); 
      break; 
     } 
    } catch (IOException e) { 
     System.out.println(" cannot write to file " + file.toString()); 
    } 
} 
+2

После обработки каждого слова вы должны сбросить флаг 'found'. – Eugene

+0

Вам необходимо исправить форматирование, чтобы оно было согласованным и легко читаемым. В настоящее время вы смешиваете стили K & R и Java. Ваш отступ - это несогласованное сочетание вкладок и пробелов. Я сделал это лучше, но вы должны последовательно делать это хорошо. Вы можете использовать инструменты, такие как внутренний форматировщик IDE, или идентификатор, или такой. – atk

+0

woha это ужасно много неизмененного кода. :) – eckes

ответ

0

Если вы хотите назвать писателем, если не найден, то вы должны использовать:

if (!found) writer(); 

Ваш разрыв только завершает внутренний цикл, вы можете добавить

if (found) break; 

, чтобы завершить внешний цикл (вы не сказали, если это требуется или нет).

+0

. Я хотел выполнить поиск ввода до тех пор, пока не будет найдено ключевое слово, если не найдено ни одного ключевого слова, а затем вызовите метод записи –

+0

Да, но вопрос в том, что вы хотите если обнаружено более одного. Если вы хотите только реагировать на первый, вам нужен второй перерыв. – eckes

+0

Я нашел решение –

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