如何使用缓冲读取器和异常处理对输入数据类型进行分类?

时间:2012-02-03 19:35:02

标签: java types input ioexception

假设用户输入了几个值,程序使用stringTokenizer来打破这些值。然后程序会尝试解析令牌并抛出错误吗?错误catch会输出数据类型; 这是第一年编程课程的一个问题,所以我宁愿没有直接的答案,而是更多的正确方向。教授只想要两个try ... catch子句,这两个子句都在寻找NumberFormatException。

提前致谢。

原始问题:

  

“使用异常和测试将键盘输入分类为其中一个   八种原始数据类型,或String。“

2 个答案:

答案 0 :(得分:1)

我们将精确缩小输入的顺序:boolean> char>双>浮动>长> int>简短>字节

  • 丢弃问题的“或字符串”部分,所有字符串都可以 求值为布尔值(参见Boolean.parseBoolean(s))。所以,你的 开始回答是“输入是一个布尔值”,并继续。

  • 输入的长度是1个字符吗?如果是这样,“输入是一个 字符“。继续不断。

  • 打开试用版。

  • Double.parseDouble(一个或多个)。如果没有异常,“输入是a 双重“,继续前进。

  • 尝试按上面给出的顺序解析输入。

  • 打开一个catch块,捕获NumberFormatException。块会 实际上是空的,因为你真正想要的是finally块。

  • 打开一个finally,你将在其中返回你的答案。

除非我遗漏了某些东西(完全有可能,因为我没有编写代码),这给你“一个”要求,使用少数例外,并利用异常来控制流程。

答案 1 :(得分:0)

最后的回答谢谢你们

import java.io.*;
import java.util.StringTokenizer;
/**
 * Classifies input into primitive types or String
 * 
 * @author Suavelizard
 * @version Feb, 2012
 */
public class Classify 
{
    public static void main(String[] args) throws IOException 
    {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Please enter some data (C-z or C-d to quit): ");
        String str = in.readLine();
        while (str != null) 
        {
            StringTokenizer tokenizer = new StringTokenizer(str);
            while (tokenizer.hasMoreTokens()) 
            {
                String token = tokenizer.nextToken();

                // your code goes here!
                try{
                    long x = Long.parseLong(token);
                    if(x<= Byte.MAX_VALUE &&x>= Byte.MIN_VALUE){
                        System.out.println("Input is a Byte");}
                    else if (x<=Short.MAX_VALUE && x>=Short.MIN_VALUE){
                        System.out.println("Input is a Short");
                    }
                    else if(x<=Integer.MAX_VALUE && x>= Integer.MIN_VALUE){
                        System.out.println("Input is an Integer"); 
                    }
                        else{
                            System.out.println("Input is a Float"); 
                        }
                    }


                catch(NumberFormatException a){


                    try{
                        double x = Double.parseDouble(token);
                        if (x<= Float.MAX_VALUE &&x>= Float.MIN_VALUE)
                        {
                            System.out.println("Input is a Float");   
                        }

                        else if(x<= Double.MAX_VALUE &&x>= Double.MIN_VALUE)
                        {
                          System.out.println("Input is a Double");   
                        }


                    }
                    catch(NumberFormatException b){
                        if (token.length() == 1){
                         System.out.println("Input is a Character");  } 
                         else if(token.equalsIgnoreCase("true")|| token.equalsIgnoreCase("false")){
                                         System.out.println("Input is a Boolean");  

                            }
                            else{                                        
                                System.out.println("Input is a String");  

                            }
                    }

                }
            }

            System.out.print("Please enter some data (C-z or C-d to quit): ");
            str = in.readLine();
        }
    } 
}