2012-09-08 12 views
-1

在我的程序中,它讀取一個名爲datafile.txt的文件... datafile.txt裏面是一個隨機的3行字。我的程序所做的是讀取用戶輸入的文件,然後他們可以輸入Line#和Word#,並且它會告訴他們在該位置的單詞..例如..從java中的datafile.txt讀取某些語句

什麼是文件閱讀?

datafile.txt

請輸入的行號和字數目(第一行是1)。

這個詞是:

我的問題是,我的程序讀取在TXT文檔爲0,1,2 3線和字從0開始。所以,閱讀第一行中的第一個單詞必須輸入0,0而不是1,1。我想要做的是讓它工作,以便他們可以輸入1,1而不是0,0。不知道我的問題是什麼,現在,這裏是我的代碼....

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class readingFile { 

    /** 
    * @param args 
    * @throws IOException 
    * @throws validException 
    */ 
    public static void main(String[] args) throws IOException, checkException 
    { 
     System.out.println("Enter file name: "); 
     Scanner keyboard = new Scanner(System.in); 
     BufferedReader inputStream = null; 
     ArrayList<String> file = new ArrayList<String>(); 
     String fileName = keyboard.next(); 
     System.out.println ("The file " + fileName + 
       " has the following lines below: "); 
     System.out.println(); 

     try 
     { 
      inputStream = new BufferedReader(new FileReader(fileName));   
      ArrayList<String> lines = new ArrayList<String>(); 
      while(true) 
      { 
       String line = inputStream.readLine(); 
       if(line ==null) 
       { 
        break; 
       } 

       Scanner itemnize = new Scanner(line); 
       while(itemnize.hasNext()) 
       { 
        lines.add(itemnize.next()); 
       } 
       lines.addAll(lines); 

       System.out.println(lines+"\n");     
      }  

      System.out.println("Please enter the line number and word number"); 

      int index1 = keyboard.nextInt(); 
      int index = keyboard.nextInt(); 

      System.out.println("The word is: "+ lines.get(index)); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error opening the file " + fileName); 
     } 
     inputStream.close(); 
    } 

    private static void checkValid(ArrayList<String> items, int index) throws checkException 
    { 
     throw new checkException("Not Found"); 
    }  
} 
+1

難道你只是在索引和索引1中減去一個之前訪問數據? –

+0

按照慣例,Java集合的索引從0開始。但是,您只需從用戶輸入的值中減去1即可。我會寫一個答案,但請先嚐試自己修復你的代碼,並添加發生的事情和你對這個問題的期望。 –

+0

我確實寫過會發生什麼事以及我想要做什麼 –

回答

0

正如我假設你剛開始學習編程我要指出的改善

3個區
  • 就像如何數學有BIDMAS,用於確定表達Java等編程語言評估報告的評估順序以微粒方式。這意味着在函數的括號內可以包含一個語句而不是一個變量或常量。這將與結果(或返回)傳遞到被調用的函數進行評估。這就是爲什麼MvG說你可以做lines.get(index - 1)

  • 並非所有你應該考慮和計劃的異常都會被編譯器告知你。例如,在你的代碼輸入的行數或字數無效的輸入,你會得到一個運行時異常(數組索引越界)

  • 命名的變量應該是有用的,你有indexindex1。有什麼不同?我從閱讀你的代碼中假設一個應該是用戶選擇的行號索引,第二個應該是該行上的單詞索引。我可以建議requestedLineIndexrequestedWordIndex

最後一點,這不是一個常見的StackOverflow問題,因此爲什麼你的問題被「推倒」了。如果您正在學習作爲課程的一部分,您是否可以在課程論壇或虛擬學習環境(VLE)上發佈問題?在相同的學習水平上,你的同齡人的支持往往有助於探索一門語言的基礎知識。

1

顯而易見的解決方案,以誠爲本1用戶輸入適應從0內部表示是減去一個在某個時候。看到你甚至不使用index1,寫

lines.get(index - 1) 

是不會徹底解決你的問題。但我想你可以從那裏拿到它,併爲index這個詞做類似的事情。

+0

@Matt如果您希望用戶不能選擇無效索引,例如小於0,請考慮上面的內容,例如:'lines.get((index <= 0)?0 :index - 1);' –

+0

我建議不要使用[三態條件運算符](http://en.wikipedia.org/wiki/%3F :)在這段代碼的級別。在數組訪問之前更好地移動索引檢查和調整。 – MvG