Java5中读取输入的最佳实践方法

Java5中读取输入的最佳实践方法,java,unix,command-line,exception-handling,console,Java,Unix,Command Line,Exception Handling,Console,我正在为孩子们写一篇教程,学习在Java5平台上编程 从控制台程序读入文本数据的最佳方式是什么 我所说的“最佳”是指在Java5级别执行此操作的最常见方式。我意识到从命令行读取文本输入充满了挑战,一个保护良好的方法必须包含多个级别的异常,这很好。在本教程的这一点上,我已经介绍了基本输出、Java中的基本程序结构和异常处理。如果您认为在用户输入之前需要涵盖其他内容,我欢迎您的建议 有趣的是,对这个问题进行网络搜索并不能立即给出答案,有很多东西需要剔除,也没有最佳实践的意义。我想这是因为有太多隐藏的

我正在为孩子们写一篇教程,学习在Java5平台上编程

从控制台程序读入文本数据的最佳方式是什么

我所说的“最佳”是指在Java5级别执行此操作的最常见方式。我意识到从命令行读取文本输入充满了挑战,一个保护良好的方法必须包含多个级别的异常,这很好。在本教程的这一点上,我已经介绍了基本输出、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系统连接到他的工作主机,当他向我展示如何列出“游戏”时,我被吸引住了)


谢谢你的帮助。

我个人认为
扫描仪
缓冲读取器
容易一点。这就是我最初学习用户输入的方式


您必须做一些相同的事情,但您可以停止异常处理,稍后再试/catch。

Scanner非常基本,代码更少

import java.util.Scanner;

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

一些反问句:

  • 孩子们几岁了

  • 在教育成果方面,你的目标是什么?或者这主要是为了给他们一些有趣的事情做

  • 您的Java经验水平如何

我的直觉是,你不应该过分追求“最佳实践”的东西。假设这些是学龄儿童,他们不需要它,他们可能没有理解它的前景。所以对他们中的大多数人来说,这将是一个无聊的废话,一个让他们关掉它的好方法

此外,如果你自己不完全理解“最佳实践”,就很难教授它。在我看来,“最佳实践”是指大多数时候都是最好的技术。要正确地教他们,你需要理解(并能够解释)他们为什么工作,以及什么时候不工作。如果你也了解一些“非最佳实践”的做事方式,这也会有所帮助。。。这样你就可以解释两者的区别了

(我还想问一下,为什么您将自己限制在Java5上……但这并不特别相关。)


当我问到“教育成果”时,我的意思是:

  • 学生获得/保持对编程的热情,或
  • 学生达到这样或那样的熟练程度,或
这是从事教学工作的人应该首先问自己的问题之一


话虽如此,我想我还是坚持上面的建议。如果你想鼓吹“最佳实践”,试着组织你的材料,让普通孩子很容易跳过“无聊”的部分。

我的想法是,当孩子们看到使用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);
}
}

嘿,好问题。我的目标是9到13岁的孩子,那是我对编程感兴趣的时候。对于教育成果,这实际上是我教程的全部要点。我希望能引起那些通常不会被贴上极客或电脑迷标签的孩子们的兴趣(哈,这并不是说这有什么错)。我自己的Java经验是大约5年的编程爱好。我的学士学位主要基于Java,但充其量也只是一年的经验。谢谢你的提问。我还将补充:没有理由对Java5进行限制,这只是我构建教程的平台。我试图避开各种版本的细节。在生产环境中,我发现Java5现在仍然是使用最广泛的。我喜欢Java 6的许多特性,这只是我开始时必须做出的决定。谢谢-那么您如何使用Scanner处理异常呢?如果用户输入了read方法无法处理的内容,该怎么办?实际上,更重要的是,用户可能输入哪些类型的输入,从而可能引发扫描仪异常?非常好的输入,谢谢,我非常重视人们的个人经验和他们给出的答案。@d您可以在使用nextXXX之前与hasNextXXX核实,或者您可以捕获相应的异常(正如jdoc所述,这将是
输入不匹配异常
无接触异常
)-就我个人而言,在阅读协议或其他东西时,我更喜欢后者,因为它更清晰,并且有一个单一的错误案例。好的,这真的很有帮助。你认为现在最好远离用户入口的细节吗?那个就是我要去的地方,若扫描器允许的话,那个可能是最好的。我只是不知道使用它会有多大的帮助。当您使用BufferedReader时,您必须将读取包含在一个try/catch块中,这至少会给学生一个关于解析文本用户输入所涉及的复杂性的提示。我不知道是否有必要教初学者try-catch块。他们在理解控制流时会遇到很多问题。扫描器就是我的助教