2015-08-15 79 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