2015-10-30 252 views
0

我需要检查用户是否正在输入java中的数值。我一直试图使用hasNextDouble,但使用hasNextDouble方法得到奇怪的错误,我不确定这是执行此检查的方式。检查数字输入java

请注意我不能使用while循环或任何其他高级方法,除非。

import java.util.Scanner; 
import java.lang.Math; 
public class CentimeterInch 
{ 
    public static void main (String [] args) 
    { 
     final int MAX=100, feet=12, meter=100; 
     final double inch=2.54; 
     Scanner scan = new Scanner (System.in); 
     System.out.println ("This program converts distances. "); 
     System.out.println ("Enter distance and unit (e.g. 37 1 or 100 2):"); 
     double distance=scan.nextDouble(); 
     if (!scan.hasNextDouble()) 
      { 
       System.out.println ("please enter a numeric value"); 
       distance=scan.nextDouble(); 
      } 
     int unitType = scan.nextInt(); 
     if (distance<0) 
      { 
       System.out.println ("Please enter a non negative distance"); 
      } 
.... 

我固定的错字,但它仍然不能正常工作,当我例如输入“A”,它崩溃。对于我来说,在将值放入'double distance'变量后调用hasNextDouble也没有意义,但是我还没有找到其他方法。 我只有一个双变量来检查,'int'不需要验证。编辑: 我提前了一下。现在它在崩溃之前显示错误。我如何让它不会崩溃,但再次接受变量?

if(!scan.hasNextDouble()) 
    System.out.println ("please enter a numeric value"); 
distance=scan.nextDouble(); 

谢谢!

+1

你的“怪异错误”是什么? – Rehman

+2

错字:'if(!scan.hasNextDouble())' – Reimeus

+0

我修正了错字,但它仍然没有运行,当我输入例如25a它崩溃。对于我来说,在将值放入'double distance'变量后调用hasNextDouble也没有意义,但是我还没有找到其他方法。我只有一个双变量来检查。谢谢! – tamir

回答

0

它应该是scan.hasNextDouble()重点在D双。

0

错别字之外,你消费nextDouble后调用hasNextDouble

在一行中取两者最简单的方法是:

if (scan.hasNextDouble()) { 
    // TODO something 
    double foo = scan.nextDouble(); // this consumes the first double 
} 
else { // TODO exit with error } 
if (scan.hasNextDouble()) { 
    // TODO something else 
    double bar = scan.nextDouble(); // this consumes the second double 
} 
else { // TODO exit with error } 

如果你想在两个服务(即用户按下输入两次),你可以消耗scan.next()两次,并在两个String使用Double.parseDouble,而捕获一个NumberFormatException的格式错误。