2015-12-08 3 views
1

Я собираюсь начать, сказав, что я уже посмотрел на поток под названием «Мне нужно сделать цикл, вводящий пользователя, пока не будет введено« сделано ». Мне не повезло с которые были даны там.Принимается ввод пользователя до тех пор, пока не будет введен <<EOF>>

Описание Я дал моей команде редактирования заключается в следующем:.

«Редактирование текстового файла, если существует В противном случае, создает новый текстовый файл Команда ждет пользователю вводить текст (. должен поддерживать несколько строк текста). Пользователь заканчивает ввод, набрав <<EOF>> и нажав enter. "

Сейчас код у меня есть это:

else if (spaceSplit[0].equals("edit")) { 
      String name = spaceSplit[1]; 
      boolean endOfFile = false; 
      String content = ""; 

      while(endOfFile == false){ 
       String userInput = s.next(); 
       content += userInput; 
       if(content.contains("<<EOF>>")){ 
        endOfFile = true; 
       } 
      } 

      FileSystem.edit(name, content); 


     } 

Ничего ошибки-, но мои else оператор печатает. Мой else заявление код заключается в следующем:

else { 
      System.out.println("That is not a command. Please try again."); 
     } 

Что также фанк является то, что программа проходит через весь do while loop затем печатает еще. Я знаю это, потому что именно Печатаемая: $That is not a commond. Please try again.

Вот начало моего do while loop:

do { 

     System.out.print("$"); 

     String input = s.nextLine(); 
     input = input.toLowerCase(); 
     spaceSplit = input.split(" "); 

Довольно запутанным. Кроме того, моя edit(String name, String content) функции выглядит следующим образом:

public static void edit(String name, String content){ 
    for(int i = 0; i < texts.size(); i++){ 
     if(texts.get(i).getName().equals(name)){ 
      texts.get(i).setContent(content); 
     } else { 
      texts.add(new TextFile(name,content)); 

      for(int j = 0; j < directories.size(); j++){ 
       if(directories.get(j).getName().equals(wDir.getName())){ 
        texts.get(texts.size() - 1).setParent(directories.get(j)); 
        System.out.println("The parent of " + name + " is " + directories.get(j).getName()); 
       } 
      } 
     } 
    } 
} 

Как вы можете видеть, что я сделал чек в конце моего edit(name,content) метода, чтобы проверить, если файл создан правильно, распечатав родительский каталог текстового файла ,

Это как моя программа должна работать, когда я вызовите команду редактирования:

$mkdir d 
$cd d 
$edit stuff.txt 
Hello everyone, this is just an example!<<EOF>> 
The parent of stuff.txt is d 
$exit 
Good Bye! 

Любая помощь при условии, что будет весьма признателен.

Вот вся do while loop:

do { 

     System.out.print("$"); 

     String input = s.nextLine(); 
     input = input.toLowerCase(); 
     spaceSplit = input.split(" "); 

     if (spaceSplit[0].equals("mkdir")) { 
      if (spaceSplit[1].equals("-p")) { 
       for (int i = 3; i < spaceSplit.length; i++) { 

       } 
      } else if (spaceSplit[1].contains("/")){ 
        //This method will create a directory farther down the tree like creating c in a/b/c 
        String[] dirSplit = spaceSplit[1].split("/"); 
        int length = dirSplit.length; 

        FileSystem.mkdir(dirSplit[length-1]); 
        int directoriesLength = FileSystem.directories.size(); 

        for(int i = 0; i < FileSystem.directories.size(); i++){ 
         if(dirSplit[length-2].equals(FileSystem.directories.get(i))){ 
          FileSystem.directories.get(i).addChild(FileSystem.directories.get(directoriesLength-1)); 
          //Checking if this works 
          System.out.println("The child was created succesfully"); 
         } 
        } 

      } else { 
       for (int i = 1; i < spaceSplit.length; i++) { 
        FileSystem.mkdir(spaceSplit[i]); 
       } 
      } 

     } else if (spaceSplit[0].equals("cd")) { 
      FileSystem.cd(spaceSplit[1]); 
     } else if (spaceSplit[0].equals("pwd")) { 
      FileSystem.pwd(); 
     } else if (spaceSplit[0].equals("ls")) { 

     } else if (spaceSplit[0].equals("edit")) { 
      String name = spaceSplit[1]; 
      boolean endOfFile = false; 
      String content = ""; 

      while(endOfFile == false){ 
       String userInput = s.next(); 
       content += userInput; 
       if(content.contains("<<EOF>>")){ 
        endOfFile = true; 
       } 
      } 

      FileSystem.edit(name, content); 


     } else if (spaceSplit[0].equals("cat")) { 
      for(int i = 1; i < spaceSplit.length; i++){ 
       FileSystem.cat(spaceSplit[i]); 
      } 
     } else if (spaceSplit[0].equals("updatedb")) { 

     } else if (spaceSplit[0].equals("locate")) { 

     } else if (spaceSplit[0].equals("exit")) { 
       exitProg = true; 
       System.out.println("Good bye!"); 
     } else { 
      System.out.println("That is not a command. Please try again."); 
     } 

    } while (exitProg == false); 
+1

Пожалуйста, покажите весь цикл while while как единый блок. Не показывать разделы не в порядке. –

+0

Откуда вы получаете пользовательский ввод? Кроме того, как вы планируете запустить этот код из командной строки? Вы не можете просто сказать «отредактировать файл stuff.txt» и запустить его в jar и выполнить операции – redFIVE

+0

Я вижу, что у вас есть цикл for, который ничего не делает, этого не должно быть –

ответ

0

Хорошо, хорошо, я предполагаю, что я отвечу на свой вопрос здесь. Теперь все работает отлично.

else if (spaceSplit[0].equals("edit")) { 
      if(spaceSplit.length > 1) { 
       String name = spaceSplit[1]; 
       boolean endOfFile = false; 
       String content = ""; 

       while (!(content.contains("<<EOF>>"))) { 
        String userInput = s.nextLine(); 
        content += userInput + " "; 
       } 

       String end = "<<EOF>>"; 

       content = content.replace(end, ""); 

       int size = tree.getTexts().size(); 

       if (size != 0) { 
        for (int i = 0; i < size; i++) { 
         if (tree.getTexts().get(i).getName().equals(name)) { 
          tree.getTexts().get(i).setContent(content); 
         } 
        } 
        tree.edit(name, content); 
       } else { 
        tree.edit(name, content); 
       } 
      } 

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