Как классифицировать типы входных данных с использованием буферизованного считывателя и обработки исключений? - PullRequest
0 голосов
/ 03 февраля 2012

Предполагается, что пользователь вводит несколько значений, и программа использовала stringTokenizer, чтобы разбить значения.Затем программа попытается проанализировать токен и выдать ошибку, верно?ловушка ошибки вывела бы тип данных;Этот вопрос задается на первом курсе обучения программированию, поэтому я бы предпочел не иметь прямого ответа, а больше указывать в правильном направлении.Профессору хотелось бы только два предложения try ... catch, оба из которых искали NumberFormatException.

Заранее спасибо.

Оригинальный вопрос:

"Использование исключений и тестирование для классификации ввода с клавиатуры на один из восьми примитивных типов данных или String. "

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Мы сузим в точности то, что вводится в следующем порядке: логическое значение> char> double> float> long> int> short> byte

  • Сбросить часть "or String"вопрос, все строки могут быть оценены в логическое значение (см. Boolean.parseBoolean (s)).Итак, ваш начальный ответ: «вход является логическим значением», и продолжайте.

  • Является ли длина ввода ровно 1 символом?Если это так, «ввод является символом».Продолжайте в том же духе.

  • Откройте блок try.

  • Double.parseDouble (s).Если исключений нет, «вход является двойным» и продолжайте.

  • Попробуйте каждый раз анализировать входные данные в указанном выше порядке.

  • Открыть блок catch, перехватывая NumberFormatException.Блок на самом деле будет пустым, поскольку на самом деле вам нужен блок finally.

  • Откройте файл finally, в котором вы получите ответ.

Если я что-то упускаю (вполне возможно, поскольку я не написал код), это дает вам требование "одно", использует несколько исключений и использует исключения для управления потоком.

0 голосов
/ 08 февраля 2012

Окончательный ответ спасибо, ребята

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();
        }
    } 
}
...