質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

5322閲覧

BigIntegerクラスを用いて、大きな数値を処理したい。

tanukitii

総合スコア44

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/11/03 14:31

編集2017/11/03 16:11

###前提・実現したいこと
かなり大きな数を扱うのでBigIntegerクラスを使おうと思ってました。
ただ、扱う数が多すぎるので配列を使おうと思っていたのですがループ処理などで自動で格納するといった処理ができないので困っています。以下のコードは間違っているのはわかるのですが直接入力せずとも配列に値を格納する方法があれば教えていただきたいのです。
(該当ソースコードに書いてあることはまず、簡単な値でできるかどうか確かめているだけで実際はもっと大きな数と多くの値を扱います。)

###発生している問題・エラーメッセージ
java.lang.NumberFormatExceprion

###該当のソースコード
BigInteger[] b = new BigInteger[3];
for(int i = 0; i < 3; i++){
b[i] = new BigInteger("i");
System.out.println(b[i]);
}

###試したこと
BigIntegerクラスを使って簡単な計算はできるようになった。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2017/11/03 14:46

タイトルを『多くの数値』ではなく『大きな数値』にした方が良いと思います。
tanukitii

2017/11/03 16:07

大きな数も扱うのでBigIntegerを使うのですが、そういった数を多く扱うので多くの数値で大丈夫だと思います。ただ、少し紛らわしい文章だったかもしれません。ご指摘ありがとうございます。
tanukitii

2017/11/03 16:08

タイトルのほうでしたか。確かにタイトルは「大きな数値」にしたほうがいい気がします。ありがとうございます。
guest

回答1

0

ベストアンサー

こういうことでしょうか。

Java

1BigInteger[] a = new BigInteger[3]; 2for(int i = 0; i < 3; i++){ 3 a[i] = new BigInteger(String.valueOf(i)); 4 System.out.println(a[i]); 5}

"i"という文字列があったとき、自動的にiの数値を展開してくれるわけではありません。

また、このような場合はBigInteger.valueOfが有用です。

Java

1BigInteger[] a = new BigInteger[3]; 2for(int i = 0; i < 3; i++){ 3 a[i] = BigInteger.valueOf(i); 4 System.out.println(a[i]); 5}

エラーの再現

Java

1int i = 0; 2System.out.println("i"); 3Integer.valueOf("i");

実行結果

i Exception in thread "main" java.lang.NumberFormatException: For input string: "i" ...

"i"という文字列を数値として解釈できないよ、という意味合いのエラーです。

投稿2017/11/03 14:36

編集2017/11/03 14:45
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanukitii

2017/11/03 16:04

なるほど…確かにこれなら配列に値をいれることができました! ただ、BigIntegerクラスはもっと大きな値をいれることができるんです。 a[i]=BigInteger.valueOf(i+572349857439730299752); のように大きな数をいれるとエラーが起きてしまいます…これはどう処理したら良いのでしょうか。
swordone

2017/11/03 16:07

それは数値リテラルで書いている「572349857439730299752」がintの範囲を超えているからです。longも10進数で19桁が限度なので21桁の整数をリテラルで書くことができません。 なので、この場合はそれぞれを別のBigIntegerにして加算することで作成することになりますね。
tanukitii

2017/11/03 16:23

あ!なるほど!うまくいきました! Javaは始めたばかりでまだそういった知識が不足していたので助かりました。 もうあきらめかけていた問題だったのでとても助かりました!! ありがとうございます!!
LouiS0616

2017/11/03 16:23

> swordoneさん 対応感謝します。
tanukitii

2017/11/03 16:28

お二人ともアドバイスありがとうございます! これでまた頑張れます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問