小弟写了一段代码,如下:
import java.util.Scanner;class GasMileage
{    public static void main(String[] args)
    {
       int miles;
       double gallons, mpg;
   
       Scanner scan = new Scanner(System.in);
       
       while(true)  //验证输入的是否是整数,若不是,则重新输入
       {
           System.out.print("Enter the number of miles: ");
           
           if(scan.hasNext("^[1-9]\\d*$"))   //验证整数的正则表达式
           {
               miles = scan.nextInt();
               break;
           }
   
           else
           {               
               String temp=scan.next();
               System.out.println("你输入的是:"+ temp);
               System.out.println("输入错误,请输入整数!");              
           }           
       }
              System.out.print("Enter the gallons of fuel used: ");
       gallons = scan.nextDouble();       mpg = miles / gallons;       System.out.println("Miles Per Gallon: " + mpg);
       
       
    }}可是小弟运行程序的时候,只要是第一次输入不是整数,则再次输入整数就不再验证了,而直接报告说是输入不是整数。而小弟用temp变量接收输入的值,的确是整数啊!这是怎么回事呢?请各位大侠不吝赐教,小弟不胜感激!

解决方案 »

  1.   

    public class GasMileage 
    {     public static void main(String[] args) 
        { 
          int miles; 
          double gallons, mpg; 
      
          Scanner scan = new Scanner(System.in); 
          
          while(true)  //验证输入的是否是整数,若不是,则重新输入 
          { 
              System.out.print("Enter the number of miles: ");
              String temp=scan.next();
              if(temp.matches("^[1-9]\\d*$"))  //验证整数的正则表达式 
              { 
                  miles=Integer.parseInt(temp); 
                  break; 
              } 
      
              else 
              {              
                  System.out.println("你输入的是:"+ temp); 
                  System.out.println("输入错误,请输入整数!");              
              }          
          } 
                System.out.print("Enter the gallons of fuel used: "); 
          gallons = scan.nextDouble(); 
          mpg = miles / gallons;
          System.out.println("Miles Per Gallon: " + mpg);  
          
        } 
      

  2.   

    不知道你的scanner里则么写的,不过你while循环里貌似没有把scan清空