【android】二重配列を使うとアプリケーションが停止します

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
telepas7

【android】二重配列を使うとアプリケーションが停止します

#1

投稿記事 by telepas7 » 13年前

androidの勉強を兼ねて、「単語学習アプリ」を作ろうと考えました。
(アプリの目標)
1、 「タイトル画面」からstartをタップ。
2、 「問題画面」へ画面遷移。 (例: dog → ①犬②アヒル③ワニ のボタンから選択し、タップ。)
3、 プレーヤーの回答が正解の場合:○、不正解の場合:×を表示する。                  ←現時点でここまでできています
4、 数秒後、次の「問題画面」へ画面遷移。
5、 3,4の繰り返し。
6、 プレーヤーが全ての問題に回答し終わったら、結果を表示。

(躓いたところ)
SubActivity.javaのButton型の配列aのところでエラーが出ました。配列を使わずに、ただのaで宣言したところうまく動きます。
二重配列にした理由は、複数の問題を順番に出していきたいので、行番号で問題番号を表し、3つの選択肢を列番号で表そうと考えたからです。
エラーの内容はnullポインター・アクセス?と警告が出ているのですが調べてもよくわかりません。そもそも二重配列でできるのかどうかも不安です。
そこで、エラーの原因と対策、「こうすればもっと良くなる!」などのアドバイスを受け付けたいです。
初心者という立場に甘えたくはないのですがどうかお助けください(汗
MainActivity.java

コード:

package net.dixq.learning;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

	
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.start);
		
		Button b_start = (Button) findViewById(R.id.b_start);
		b_start.setOnClickListener(this);
	}
		@Override
		public void onClick(View v){
			// TODO 自動生成されたメソッド・スタブ
			Intent intent = new Intent();
			intent.setClassName("net.dixq.learning","net.dixq.learning.SubActivity");
			startActivity(intent);
		}

}
SubActivity.java

コード:

package net.dixq.learning;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class SubActivity extends Activity {
	
	public void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button[][] a = null ;
		a[0][1] = (Button) findViewById(R.id.a1);
		a[0][2] = (Button) findViewById(R.id.a2);
		a[0][3]= (Button) findViewById(R.id.a3);	
	
		a[0][1].setOnClickListener(new View.OnClickListener(){
			public void onClick(View v) {
				//TODO 自動生成されたメソッド・スタブ
				clickR();
			}
		});
		a[0][2].setOnClickListener(new View.OnClickListener() {		
			public void onClick(View v) {
				// TODO 自動生成されたメソッド・スタブ
				clickF();
			}
		});
		a[0][3].setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// TODO 自動生成されたメソッド・スタブ
				clickF();
			}
		});
	}
	
	public void clickR(){
		ImageView image = (ImageView)findViewById(R.id.imageView1);
		image.setImageResource(R.drawable.maru);	
	}
	
	public void clickF(){
		ImageView image = (ImageView)findViewById(R.id.imageView1);
		image.setImageResource(R.drawable.batu);
	}
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 【android】二重配列を使うとアプリケーションが停止します

#2

投稿記事 by みけCAT » 13年前

コード:

Button[][] a = null ;
ではなく、

コード:

Button[][] a=new Button[1][4];
などのようにして配列を作らないといけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 【android】二重配列を使うとアプリケーションが停止します

#3

投稿記事 by みけCAT » 13年前

ボタンを二次元配列に入れるのではなく、問題のテキストのみを二次元配列に入れておいて、
出題時に問題のテキストをボタンに設定する、という形式にはできませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

解決しました!

Re: 【android】二重配列を使うとアプリケーションが停止します

#4

投稿記事 by 解決しました! » 13年前

無事動きました。おっしゃる通り配列宣言時に問題があったようです。
あと言われたように、「ボタンを二次元配列に入れるのではなく、問題のテキストのみを二次元配列に入れておいて、出題時に問題のテキストをボタンに設定する、という形式」での実装も試してみました。確かに今回のように複数問題扱う場合はこちらの方法のほうが効率が良いように思います。
いろいろと助言ありがとうございました。またよろしくお願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る