2015-05-02 3 views
0

У меня есть незначительная проблема с моим условием IF. Этот метод считывает пользовательский ввод и сканирует текстовый файл для введенного текста. Это работает. Я хочу выполнить мой метод Writer, если вход не найден. И там, где моя проблема. Кажется, я не могу вернуть найденную строку и выйти из программы. Вместо этого я возвращаю найденную строку, а затем вызываю метод записи, который я не хочу делать.Выполнение с инструкциями If

public static void parseFile(String s) throws FileNotFoundException { 
    File file = new File("data.txt"); 

    Scanner scanner = new Scanner(file); 
    while (scanner.hasNextLine()) { 
     final String lineFromFile = scanner.nextLine(); 
     if (lineFromFile.contains(s)) { 
      // a match! 
      System.out.println(lineFromFile); 
     } 
     else{ 
      Writer(); 
     } 
    }  
} 

И вот мой метод писателя.

public static void Writer() { 
    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 cannot find this line... Enter new line"); // 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 line again"); 
       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()); 
    } 
} 
+0

, пожалуйста, исправьте свое описание, вы пишете найденную строку как для if, так и для других, я предполагаю, что один из них не должен быть найден –

+0

Я предлагаю сделать некоторые println с s и linefrom файлом. Можете ли вы показать нам вывод s и linefromfile в первом случае if – user43968

+0

Почему вы снова читаете ввод с клавиатуры в функции Writer? –

ответ

0

Используйте флаг, чтобы определить, что входной s найден или нет, попробуйте этот способ,

public static void parseFile(String s) throws FileNotFoundException { 
    File file = new File("data.txt"); 

    Scanner scanner = new Scanner(file); 
    int flag_found=0; 
    while (scanner.hasNextLine()) { 
     final String lineFromFile = scanner.nextLine(); 
     if (lineFromFile.contains(s)) { 
      // a match! 
      System.out.println(lineFromFile); 
      flag_found = 1;//Input is found 
     } 
    } 

    if(flag_found==0){// input is not found in the txt file so flag_found remains 0 
     Writer(); 
    }  
} 
0

Я бы переставить программировать так, что.

  • другие особенности метода от пользователя ввод.
  • только для создания одного сканера для любого входа, например. System.in, когда-либо, и вы будете путать себя, если вы этого не сделаете. например сделайте его static final глобальным. Обычно это плохой выбор, но в вашем случае вы обмениваете глобальное поле.
  • У этой внешней самой функции есть цикл, который продолжает выполнять действие, пока вам не нужно остановиться. Вы можете установить флаг или использовать break; или return;, чтобы разбить цикл.
  • также старайтесь, чтобы вы открывали файлы только один раз. Я бы сделал и внешний метод.
  • вы разбить свою программу так, у вас есть один способ, чтобы прочитать файл, чтобы найти что вам нужно от него и другой способ, чтобы обработать второй файл и т.д.
0

Причина вы переживаете, что ваша программа называя Writer-метод заключается в том, что цикл будет продолжаться до конца текстового файла. Вы можете использовать break для выхода из while -loop:

public static void parseFile(String s) throws FileNotFoundException { 
    File file = new File("data.txt"); 

    Scanner scanner = new Scanner(file); 
    while (scanner.hasNextLine()) { 
     final String lineFromFile = scanner.nextLine(); 
     if (lineFromFile.contains(s)) { 
      // a match! 
      System.out.println(lineFromFile); 
      break; // <--- break out of the loop when a match is found. 
     } 
     else 
     { 
      Writer(); 
     } 
    }  
} 
0

кажется, что вы можете написать метод как:

public static String parseFile(String s) throws FileNotFoundException { 
    File file = new File("data.txt"); 
    boolean inputFound = false; 
    Scanner scanner = new Scanner(file); 
    String lineFromFile; 
    while (scanner.hasNextLine()) { 
     lineFromFile = scanner.nextLine(); 
     if (lineFromFile.contains(s)) { 
      // a match! 
      inputFound = true; 
      break; 
     } 
    }  
    if(!inputFound) { 
     writer(); //camel case should be used. 
     return ""; //empty string 
    } else { 
     return lineFromFile; 
    } 
} 

На имя метода примечание стороны должны быть в ГорбатыйРегистр. Также вам не нужно создавать новую строку String lineFromFile каждый раз в цикле.

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