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

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

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

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

Q&A

解決済

1回答

1288閲覧

配列についての不具合

Rivia

総合スコア23

Java

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

1グッド

1クリップ

投稿2019/03/20 03:46

編集2019/03/20 04:04

フィボナッチ数列を9つまで表示させることをするプログラムを作ろうと思っています。
ちなみに1番目の項は0で次は1です。

java

1import java.util.Scanner; 2public class Program { 3 4 public void input() { 5 Scanner scan = new Scanner(System.in); 6 } 7 public void compute() { 8 9 } 10 public void output() { 11 int num[] = new int[3]; 12 System.out.println(num[0]); 13 System.out.println(num[1]); 14 for(int i=2;i<=9;i++) { 15 num[i]= num[i-1]+num[i-2]; 16 System.out.println(num[i]); 17 } 18 19 } 20 public static void main(String[] args) { 21 Program p = new Program(); 22 p.input(); 23 p.compute(); 24 p.output(); 25 } 26} 27

初めてjavaで配列を使うので、何がだめなのかが分かりません。
ちなみに配列については以下のサイトを参考にしました。
リンク内容

エラー文

Exception in thread "main" 0
0
0
java.lang.ArrayIndexOutOfBoundsException: 3
at Program.output(Program.java:15)
at Program.main(Program.java:24)
どこが間違えているのか教えていただけないでしょうか

DrqYuto👍を押しています

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

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

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

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

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

m.ts10806

2019/03/20 03:52

ArrayIndexOutOfBoundsException については調べてみましたか?そこまで珍しいエラーではないです。
m.ts10806

2019/03/20 03:53

あとタイトルが「フィボナッチ数列について」とありますが、その数列そのものが問題ではないので、起きている問題に寄せたタイトルにされたほうが良いです。 質問は修正できますので、調べた内容なども含めて適宜修正ください。
Rivia

2019/03/20 04:07

回答有り難うございます! タイトルは確かに大事ですね! ご指摘ありがとうございます。 あとご指摘どおり、エラー文を調べたところ、配列の要素が足りないことに気づきました。 今から修正していきます。
m.ts10806

2019/03/20 04:11

初心者さんであっても質問する前にできることは意外とたくさんあるので、こちらの記事などを参考に、まずは調べてみてから質問するかどうか考えては如何でしょうか。 https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5 エラーメッセージは敵ではなくなぜ動かないか教えてくれる味方です。
Rivia

2019/03/20 04:16

はい!為になるリンクありがとうございます。 是非活用させていただきます。 そして、無事数列のほうが出力されました。(最初のほうに項に代入をするのを忘れていたのも気づきました。) 本当はあなたをベストアンサーに選びたいのですが、、、 選べないので、他の方にさせていただきます。 回答ありがとうございました!
m.ts10806

2019/03/20 04:19

こちらは「追記修正依頼」です。 質問に不備や不足があったり、丸投げになってるとか、回答する前に確認したいときの通信欄として使われます。 私はteratailの「質問するときのヒント」のページにあることに則って「どこまで調べたの?」と確認をしただけなので回答したつもりはないです。 ただ、調べ方さえ分かれば自己解決できることも非常に多いので、質問するかどうかはまず調べてから考えるようにしてください。
Rivia

2019/03/20 04:23

はい。ありがとうございます。
guest

回答1

0

ベストアンサー

Java

int num[] = new int[3];
...
for(int i=2;i<=9;i++) {
num[i]= num[i-1]+num[i-2];
...
}

i = 3 のとき、配列numへの範囲外アクセスが起きていることにはお気付きでしょうか。

plain

1Array Index OutOfBounds Exception 2配列 インデックス 範囲外 例外

対策
簡単にできるのは次のうちどちらか。
0. numの要素数を充分増やす
0. ArrayListなど可変長のクラスを使う

あるいは前回と前々回の数値だけ変数にぶっこむような方法もアリです。
後になってフィボナッチ数列を再利用しないのならこれでも充分。

投稿2019/03/20 03:59

編集2019/03/20 04:15
LouiS0616

総合スコア35660

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

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

Rivia

2019/03/20 04:09

回答有り難うございます。 はい!上の方のご指摘によって要素数が足りていないことに気づきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問