2017-09-16 86 views
0

我需要使用列表從文本文件打印出每個字母。我不確定它現在在哪裏搞亂了。通過列表一次打印出一個字符

這是我到目前爲止的代碼。它目前只打印出文件的第一個字母。例如,如果第一個字符是「H」,它只會打印出「H」,而不會繼續執行文件的其餘部分。我測試了多個文件,以確保它不僅僅是我正在使用的文件。它採用標準.txt文件中的短語。

任何幫助將不勝感激!

package parsephrase; 

    /** 
    * 
    * @author Matt 
    */ 
    import java.io.IOException; 
    import java.nio.file.Path; 
    import java.nio.file.Paths; 
    import java.util.ArrayList; 
    import java.util.Scanner; 

    public class ParsePhrase { 

    private final Path filePath; 
    private ArrayList<String> inputList = new ArrayList<String>(); 
    private ArrayList<Character>outputList = new ArrayList<Character>(); 


     public ParsePhrase(String inputFile) { 
     filePath = Paths.get(inputFile); 
     } 

     public void readLines() { 
     try (Scanner input = new Scanner(filePath)) { 
      while (input.hasNextLine()) { 
       logInputLine(input.nextLine()); 
      } 
      input.close(); 
     } 
     catch (IOException e) { 
      System.out.println("Unable to access file."); 
     } 
     } 

     public void logInputLine(String lineIn) { 
     Scanner input = new Scanner(lineIn); 
     inputList.add(input.nextLine()); 
     input.close(); 
     } 

     public void displayOutput() { 
     for (int inputListIndex = 0; inputListIndex < inputList.size(); inputListIndex++) { 
      String inputString = inputList.get(inputListIndex); 
      for (int inputStringIndex = 0; inputStringIndex < inputString.length(); inputStringIndex++) { 
       if (outputList.isEmpty()) { 
        outputList.add(inputString.charAt(inputStringIndex)); 
        continue; 
       } 
       for (int outputListIndex = 0; outputListIndex < outputList.size(); outputListIndex++) { 
        if (Character.isLetter(inputString.charAt(inputStringIndex))) { 
         if (inputString.charAt(inputStringIndex) <= outputList.get(outputListIndex)); 
         displayCharArray(outputList); 
         break; 
        } 
        else if (inputString.charAt(inputStringIndex) > outputList.get(outputListIndex)) { 
         if (outputListIndex == outputList.size() - 1) { 
          outputList.add(inputString.charAt(inputStringIndex)); 
          displayCharArray(outputList); 
          break; 
         } else { 
          continue; 
         } 
        } 
       } 
      } 
     } 
} 

    public void displayCharArray(ArrayList<Character> listIn) { 
      for (Character c : listIn) { 
       System.out.println(c); 
      } 
      System.out.println(); 
    } 

    public static void main(String[] args)throws IOException { 
     ParsePhrase parser = new ParsePhrase("C:\\devel\\cis210\\Week 3\\Test.txt");  
     parser.readLines(); 
     parser.displayOutput(); 
    } 
    } 
+2

歡迎堆棧溢出!你已經在你的問題中發佈了很多代碼,這使得我們(以及未來的讀者)不清楚問題出在哪裏。請將您的問題代碼減少到10行或更少。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)和[如何調試小程序](https://ericlippert.com/2014/03/05 /如何調試的小程序/)。 –

+2

[什麼是調試器,它如何幫助我診斷問題?](https://stackoverflow.com/q/25385173/5221149) – Andreas

回答

0

雖然沒有測試過,但這個問題可能造成的if條件當前導致是多餘的:

if (inputString.charAt(inputStringIndex) <= outputList.get(outputListIndex)); // if terminated by semi colon 
displayCharArray(outputList); // display the first character 
break; // executed certainly 

應該理想地:

if (inputString.charAt(inputStringIndex) <= outputList.get(outputListIndex)) { 
    displayCharArray(outputList); 
    break; 
} 
+0

感謝您的幫助。我用你的建議修改了我的代碼。不幸的是,我仍然無法讓它打印的不僅僅是第一個字符。我相信這可能是我忽略的一些愚蠢的東西。 –