前提・実現したいこと
表題の通りです。
1~最大100桁の数字の計算をmath.BigIntegerを使用せずに計算する課題で、
取得した任意の数字の文字列をひとまず10000進数として、4桁ずつをarrayListに入れてみた。計算時にInteger.parseInt(array[i])で取得した文字列を数字に変換しようとしているがエラーになっている。
この理由がよく分かっておりません。ご教示いただければと考えています。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) at java.base/java.lang.Integer.parseInt(Integer.java:662) at java.base/java.lang.Integer.parseInt(Integer.java:770) at com.codewithks.Main.main(Main.java:69)
該当のソースコード
java
1import java.math.BigInteger; 2import java.util.*; 3public class Main { 4 public static void main(String[] args) { 5 //Sは最大100桁(数字の)文字列 6 Scanner sc = new Scanner(System.in); 7 String s = sc.nextLine(); 8 9 int len = s.length(); 10 int startIndex = len-4; 11 int stopIndex = len; 12 ArrayList<String> array = new ArrayList<>(); 13 while(startIndex>=0) { 14 String num = s.substring(startIndex, stopIndex); 15 //System.out.println(num); 16 array.add(num); 17 stopIndex = startIndex; 18 startIndex = startIndex - 4; 19 if(startIndex<0) { 20 //System.out.println(s.substring(0, stopIndex)); 21 array.add(s.substring(0, stopIndex)); 22 } 23 } 24 for(int i=0; i<array.size(); i++){ 25 int x = Integer.parseInt(array.get(i)); 26 //ここでエラー 27 } 28 29 30 } 31}
試したこと
arrayListに代入する時にparseIntする場合、while文で回している限りは特にエラーは出ません。しかし、4桁ずつで区切った場合最後の1〜3桁が残る数字はif文を使って補完していますが、ここでエラーが出ます。エラー内容は上記と同じです。
ArrayList<Integer> array = new ArrayList<>(); while(startIndex>=0) { String num = s.substring(startIndex, stopIndex); int x = Integer.parseInt(num); //ここではエラーにならない array.add(x); stopIndex = startIndex; startIndex = startIndex - 4; if(startIndex<0) { String last = s.substring(0, stopIndex); int y = Integer.parseInt(last); //ここで同じエラー array.add(y); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 03:48