案件被跳过并被发送到捕获?

时间:2014-03-21 18:00:14

标签: java string tokenize

当运行此代码时,将跳过案例6并将其发送到catch语句。

用户应该输入他/她的全部放在一行(例如6 4 10 ENTER)然后这些数字应该被StringTokenizer拆分然后添加到while语句中,而是被发送抓住印刷声明。

下面是我的consoleReader类,用于解释它的作用以及它引发的异常,以及我的程序中的案例6。

  case 6:
                        System.out.println("Enter your numbers all on one line then press enter");
                        String pnum = console.readLine();

                        StringTokenizer tokenizer = new StringTokenizer(pnum);

                        double sum = 0;
                        while(tokenizer.hasMoreTokens()){
                            double num = Double.parseDouble(pnum);
                            sum = num + num;
                        }
                        mathOut = String.valueOf(sum);

                    break;
            }
            }catch(NumberFormatException e){
                System.out.println("Your number was incorrect, please try again, enter \"E\" to exit or enter to continue.");
                String continueOrQuit = console.readLine();

                if(continueOrQuit.equalsIgnoreCase("e")){
                    done = true;
                }else{
                    done = false;
                }

ConsoleReader:

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

/** 
   A class to read strings and numbers from an input stream.
   This class is suitable for beginning Java programmers.
   It constructs the necessary buffered reader, 
   handles I/O exceptions, and converts strings to numbers.
*/

public class ConsoleReader
{  /**
      Constructs a console reader from an input stream
      such as System.in
      @param inStream an input stream 
   */
   public ConsoleReader(InputStream inStream)
   {  reader = new BufferedReader
         (new InputStreamReader(inStream)); 
   }

   /**
      Reads a line of input and converts it into an integer.
      The input line must contain nothing but an integer.
      Not even added white space is allowed.
      @return the integer that the user typed
   */
   public int readInt() 
   {  String inputString = readLine();
      int n = Integer.parseInt(inputString);
      return n;
   }

   /**
      Reads a line of input and converts it into a floating-
      point number. The input line must contain nothing but 
      a nunber. Not even added white space is allowed.
      @return the number that the user typed
   */
   public double readDouble() 
   {  String inputString = readLine();
      double x = Double.parseDouble(inputString);
      return x;
   }

   /**
      Reads a line of input. In the (unlikely) event
      of an IOException, the program terminates. 
      @return the line of input that the user typed, null
      at the end of input
   */
   public String readLine() 
   {  String inputLine = "";

      try
      {  inputLine = reader.readLine();
      }
      catch(IOException e)
      {  System.out.println(e);
         System.exit(1);
      }

      return inputLine;
   }

   private BufferedReader reader; 
}

1 个答案:

答案 0 :(得分:3)

您正在尝试转换原始字符串输入而不是标记:

改变这个:

while(tokenizer.hasMoreTokens()){
                        double num = Double.parseDouble(pnum);
                        sum = num + num;
                    }

由此:

while(tokenizer.hasMoreTokens()){
    String token = tokenizer.nextToken();
    double num = Double.parseDouble(token);
    sum += num;
}