ここから本文です

paizaでスキルチェックを解いています。 Bランクの問題で、『小学校低学年向けの...

ポルポラさん

2018/11/614:56:20

paizaでスキルチェックを解いています。
Bランクの問題で、『小学校低学年向けの足し算と引き算の計算ドリルをつくりましょう。

計算ドリルとして問題に重複があると計算力の訓練にならないため、足し算、引き算それぞれで重複が無いようにつくらなければなりません。必要な足し算と引き算の問題の数が与えられるので、それに従ってドリルを作成してください。


なお、その際問題に出てくる数値および解答はすべて 0 ~ 99 の整数になるようにします。
足し算も順番を変えたものは異なる問題とします (a ≠ b のとき "a + b =" と "b + a =" は異なる問題)。』という問題をやっていたのですが、ランタイムエラーになってしまいます。
何処がおかしいのか分かりません。お知恵をお貸しください。
(見づらかったら申し訳ございません)

↓ソースコード
import java.util.*;


public class Main {
public static void main(String[] args) {
// 自分の得意な言語で
// Let's チャレンジ!!

Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int m = M;
int n = N;
int A = 0;
int B = 0;
int tasizan = 0;
int hikizan = 0;
ArrayList<Integer> tasu = new ArrayList<Integer>();
ArrayList<Integer> hiku = new ArrayList<Integer>();
String[] hugou = {"+","-"};
ArrayList<Integer> keisan = new ArrayList<Integer>();

for(int i=0;i<100;i++){
keisan.add(i);
hiku.add(i);
tasu.add(i);
}

for(int j=1;j<=M+N;j++){
int h = (int)(Math.random()*2);//0と1をランダムに表示
String H = hugou[h];
Collections.shuffle(tasu);
Collections.shuffle(hiku);
System.out.print(j + ":");
if(H.equals("+")){
//もしMが0だったら+を-にする
if(m<=0){
A++;
System.out.println(A +"-:" + hiku.get(keisan.get(j)) + " - " + hiku.get(keisan.get(j+1)) + " =");
n--;

//Mが0以外だったら+のままで表示する
}else{
B++;
System.out.println(B +"+:" + tasu.get(keisan.get(j)) + " + " + tasu.get(keisan.get(j+1)) + " =");
m--;

}
//Hがマイナスだった場合
}else if(H.equals("-")){
if(n<=0){
B++;
System.out.println(B +"+:" + tasu.get(keisan.get(j)) + " + " + tasu.get(keisan.get(j+1)) + " =");

m--;
}else{
A++;
System.out.println(A + "-:" + hiku.get(keisan.get(j)) + " - " + hiku.get(keisan.get(j+1)) + " =");
n--;

}
}

}


}
}

閲覧数:
191
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

あーばさん

2018/11/618:32:16

このプログラムでランタイムエラーが起こるのは主に次の2パターンです。
・入力される文字列を数値に変換できない
・入力値の合計(M + N)が 99 以上になる

おそらく後者でエラーが起きていると思われます。現在 ArrayList 中に 0~99 の数値を入れて計算式を作成していますが、入力値が合計 99 以上になると keisan.get(100) が実行され、IndexOutOfBoundsException が発生します。計算式の作り方を根本から修正する必要があるでしょう。

質問した人からのコメント

2018/11/7 09:18:00

ありがとうございます。
直してみます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる