2011-07-28 18 views
3

我正在寫爲孩子們的教程,學習編程Java 5的平臺上。最佳實踐方法來讀取輸入Java 5中

什麼是從一個控制檯程序讀取文本數據的最佳方式?

「最好的」我的意思是在Java 5級別上最常用的方法。我知道在命令行中讀取文本輸入是充滿挑戰和良好守衛方法一定要結合例外的幾個層次,這很好。在本教程中,我已經介紹了基本輸出,Java中的基本程序結構,異常處理。如果您認爲在用戶輸入之前需要覆蓋更多的東西,我很樂意提供建議。

有趣的是,在這個問題上進行網絡搜索並不能立即給出答案,還有很多需要解決的問題,而且沒有最佳實踐意義。我想這是因爲有太多隱藏的警告,它並不像看起來那麼簡單。

import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.io.IOException; 

class Example { 

    private BufferedReader br; 
    private String inputString; 

    public static void main(String[] args) { 

     String inputString = null; 

     BufferedReader br = 
      new BufferedReader(new InputStreamReader(System.in)); 

     System.out.print("\n > "); 

     try { 

      inputString = br.readLine(); 

     } catch (IOException ioe) { 

      System.out.println("\n IOException called."); 
     } 

     System.out.println("\n Input was: " + inputString); 
    } 
} 

你會編譯這個使用:它使用javac Example.java

運行:Java示例

是否有你能想到的,可能是孩子更多有益的更好的辦法?滑稽的這些東西怎麼基本的似乎是,但是當你真正看它,這是收集一行文字錯誤檢查的最小量大量的代碼。

如果你想添加一個關於你如何對編程感興趣的可選評論,我會非常感激。對我來說,這是機會(我父親帶回家一個啞終端在家裏完成工作,連接到他的工作的主機通過撥號連接到UNIX系統上,當他向我展示瞭如何列出「遊戲」我被鉤住了)。

感謝您的幫助。

+0

如果你的目標是孩子沒有任何預先存在的知識,也許與避免所有的樣板代碼的一種語言去?在python中,你可以用三個班輪替換所有這些,而不必擔心類,例外和什麼(對於生產代碼,你顯然必須擔心這些東西,但對於兒童來說,它「運行」可能就足夠了) – Voo

+0

我會請說明使用支持的Java版本(Java 6 update 26或Java 7)的最佳實踐。 –

回答

10

掃描儀是非常基本的和更少的代碼。

import java.util.Scanner; 

class Example{ 
    public static void main(String args[]){ 
     Scanner s = new Scanner(System.in); 
     String inputString = s.nextLine(); 
     //Output stuff 
    } 
} 
+0

好的,這真的很有幫助。您認爲在這一點上遠離用戶輸入的細節會更好嗎?那是我前往的地方,如果Scanner允許的話,這可能是最好的。我不確定使用它有多麼有啓發性。當你使用BufferedReader的時候,你必須在try/catch塊中包含讀取內容,這至少會給學生一個關於解析文本用戶輸入所涉及的複雜性的暗示。 – dvanaria

+0

我不知道我是否一定會教初學者關於try-catch塊。他們會有足夠的問題來理解控制流。掃描儀是我作爲初學者教的東西,我們沒有涵蓋嘗試抓住直到在文件上使用掃描儀,在課程後期。如果你真的想要的話,你可以使用Scanner來使用'nextInt()'讀取一個int值,並將其放在一個try-catch中,因爲如果輸入非int值就會發生InputMismatchException。 – Jodaka

1

我個人認爲ScannerBufferedReader容易一點。這就是我最初學習用戶輸入的方式。

你必須做一些相同的事情,但你可以放棄異常處理,並在稍後的日子裏嘗試/捕獲。

+0

謝謝 - 那麼您如何使用Scanner處理異常呢?如果用戶輸入讀取方法無法處理的內容,該怎麼辦?實際上,更重要的是,用戶輸入什麼類型的輸入可能會導致Scanner異常?偉大的入口,謝謝,我用他們給出的答案對人們的個人經歷給予了很多的重視。 – dvanaria

+0

@dvanaria你可以在使用nextXXX之前檢查hasNextXXX,或者你可以捕獲相應的異常(因爲jdoc聲明這將是'InputMismatchException'或'NoSuchElementException') - 我個人比較喜歡後者在讀取協議或其他東西時更清楚並且有一個奇異的錯誤情況。 – Voo

1

一些反問:

  • 什麼年齡是孩子嗎?

  • 您在教育成果方面的目標是什麼?或者這主要是爲了給他們一些有趣的事情。

  • 什麼是您的 Java的經驗水平?

我的直覺是,你不應該過度「最佳實踐」的東西。假設這些都是適齡孩子,他們不需要它,他們可能沒有理解它的前景。所以對於他們中的大多數人來說,這將是無聊的等等,並且是一個很好的方法來關閉它們。

另外,如果你自己沒有完全理解,很難教授「最佳實踐」。我看到它的方式,「最佳實踐」是關於大多數時候最好的技術。爲了正確地教導他們,你需要了解(並能夠解釋)他們爲什麼工作,何時不工作。這也有助於您瞭解一些關於「不是最佳做法」的做法......以便您可以解釋這種差異。

(我還問,爲什麼你約束自己到Java 5 ...但是這不是特別相關。)


當我問「教育成果」我很刻薄的東西,如:

  • 學生得到/保持熱衷於編程,或
  • 學生達到這樣和熟練的這樣一個水平,或
  • ...

這是教學業務中的某些人應該自問的第一個問題之一。

話雖如此,我想我會堅持以上的建議。如果你想擊敗「最佳實踐」的鼓,嘗試構建你的素材,這樣一般的小孩很容易跳過「無聊」的位。

+0

嘿,很好的問題。我針對的是9歲至13歲的孩子,這就是我對編程感興趣的時候。對於教育成果來說,這實際上就是我的教程的全部內容。我希望從那些通常不會被標記爲極客或電腦迷的孩子那裏獲得興趣(不是說這有什麼不妥,哈哈)。我對Java的使用經驗是在愛好層面進行大約5年的編程。我的學士學位主要是基於Java,但最多隻有一年的經驗。感謝您的提問。 – dvanaria

+0

此外還會增加:沒有理由限制Java 5,這只是我在構建我的教程的平臺。我試圖遠離各種版本的細節。在生產環境中,我發現Java 5現在仍然是最廣泛使用的。我喜歡Java 6的很多功能,這只是我在創建時做出的一個決定。 – dvanaria

1

我的想法是,當孩子們在使用JOptionPane的新屏幕上看到他們的結果時會更加激動。

import javax.swing.JOptionPane; 
public class test{ 
public static void main(String[] args){ 
String name=JOptionPane.showInputDialog(null,"Enter your name"); 
JOptionPane.showMessageDialog(null, "Your Name: " + name); 
} 
}