2015-08-15 56 views
0

我想从Java的扫描器输入中只获得BigInteger,但是循环超出了限制。如果我想得到2倍的输入,循环获得两次,但只打印一次。我想获得输入并将输入和显示结果相乘。Java中的BigInteger扫描器输入

import java.math.BigInteger; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class Fastmultiplication { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     BigInteger m = BigInteger.valueOf(1); 
     BigInteger n = BigInteger.valueOf(1); 
     Scanner sc = new Scanner(System.in); 
     Scanner sc1 = new Scanner(System.in); 
     int in = sc.nextInt(); 

     ArrayList<BigInteger> al = new ArrayList<BigInteger>(); 

     while ((sc.hasNextBigInteger()) && (sc1.hasNextBigInteger()) && (in != 0)) { 
      in--; 
      m = sc.nextBigInteger(); 
      n = sc1.nextBigInteger(); 
      al.add(m.multiply(n)); 

     } 
     System.out.println(al.size()); 
     for (BigInteger integer : al) { 

      System.out.println(integer); 

     } 
     sc.close(); 
     sc1.close(); 
    } 
} 

回答

2

我不明白,你为什么要创建两个Scanner对象?但是这里是工作代码。

import java.math.BigInteger; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class Fastmultiplication { 
    public static void main(String[] args) { 
     BigInteger m, n; 
     try (Scanner sc = new Scanner(System.in)) { 
      int in = sc.nextInt(); 

      ArrayList<BigInteger> al = new ArrayList<>(); 
      while (in > 0) { 
       in--; 
       m = sc.nextBigInteger(); 
       n = sc.nextBigInteger(); 
       al.add(m.multiply(n)); 
      } 

      al.stream().forEach((bigInteger) -> { 
       System.out.println(bigInteger); 
      }); 
     } catch (Exception e) { 
      System.out.println("Invalid user input.Going to terminate this program"); 
     } 
    } 
} 
+0

非常感谢您的回答,我已经试过这个,但是SPOJ会抛出一个RTE。如果我们输入字符串,程序应该终止。 – krishna

+0

我已经更新了我的答案。在错误的输入中,我终止了这个程序。如果需要,您可以根据自己的需要更改验证部分。你问题中的主要问题是循环超出了限制。 –

+0

感谢您纠正此问题,但即使使用此代码,我也会得到错误答案。问题是http://www.spoj.com/problems/MUL/ – krishna