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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

4回答

10102閲覧

if文に配列を使う方法が知りたいです

mari_tom

総合スコア12

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2015/06/18 16:32

編集2015/06/19 07:03

eclipseにてAndroidアプリを作成中です。
if文に配列を使うコードを書いたら、『メソッド setImageResource(int) は型 Integer で未定義です』というエラーが出てしまいました。
自分なりに調べてみた所、int型で配列を使う際はIntegerにしなければダメだという事を知り、Integerに変換(?)したのですが、それでもエラーが消えてくれません。
自分のコードはどう間違っていて、どう直せばエラーが消え、正しく動くのかどうか教えていただけないでしょうか。
よろしくお願いします。

lang

1package jp.example.wgamen; 2 3import java.util.Random; 4import android.annotation.SuppressLint; 5import android.app.Activity; 6import android.content.Intent; 7import android.content.res.TypedArray; 8import android.os.Bundle; 9import android.view.View; 10import android.widget.Button; 11import android.widget.ImageView; 12 13public class SubActivity extends Activity { 14 15 ImageView go[]; 16 17 @SuppressLint("UseValueOf") 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.sub); 22 // 画面に6個の画像表示領域の器を配列で用意 23 go = new ImageView[5]; 24 25 // 配列に画面に配置したImageViewを設定 26 go[0] = (ImageView)findViewById(R.id.v1); 27 go[1] = (ImageView)findViewById(R.id.v2); 28 go[2] = (ImageView)findViewById(R.id.v3); 29 go[3] = (ImageView)findViewById(R.id.v4); 30 go[4] = (ImageView)findViewById(R.id.v5); 31 go[5] = (ImageView)findViewById(R.id.v6); 32 33 //整数を入れる為の変数を宣言 34 int go2; 35 Integer go_r = new Integer(go2); 36 37 // 画像のリストを取得 38 TypedArray images = getResources().obtainTypedArray(R.array.r); 39 TypedArray images2 = getResources().obtainTypedArray(R.array.2r); 40 TypedArray images3 = getResources().obtainTypedArray(R.array.3r); 41 TypedArray images4 = getResources().obtainTypedArray(R.array.4r); 42 43 // Randomクラスのインスタンスを生成 44 Random r = new Random(); 45 46 //0以上100未満の整数の乱数を作成する 47 go_r = r.nextInt(100); 48 49 //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する 50 if(go_r <= 2){ 51 go_r.setImageResource(R.array.4r); 52}else 53 //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する 54 if((go_r >= 3) && (go_r <= 12)){ 55 go_r.setImageResource(R.array.3r); 56}else 57 //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する 58 if((go_r >= 13) && (go_r <= 39)){ 59 go_r.setImageResource(R.array.2r); 60}else{ 61 //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する 62 go_r.setImageResource(R.array.r); 63} 64

なにとぞよろしくお願いします。

追記:沢山のご教示ありがとうございます。お返事が遅くなってしまいすみません。
いただいたアドバイスを参考にソースを変えたところ、エラーが消えました!ありがとうございます!
ですが、// 画像のリストを取得 の所のコードが働かず、画像が何も表示されません
// 画像のリストを取得 のコードを生かし、画像を表示させるには何が足らないのでしょうか。図々しいですが、再度お知恵をお借りできたらと思います。
どうかよろしくお願いします

lang

1 // 画面に6個の画像表示領域の器を配列で用意 2 go = new ImageView[5]; 3 4 // 配列に画面に配置したImageViewを設定 5 go[0] = (ImageView)findViewById(R.id.v1); 6 go[1] = (ImageView)findViewById(R.id.v2); 7 go[2] = (ImageView)findViewById(R.id.v3); 8 go[3] = (ImageView)findViewById(R.id.v4); 9 go[4] = (ImageView)findViewById(R.id.v5); 10 go[5] = (ImageView)findViewById(R.id.v6); 11 12 //整数を入れる為の変数を宣言 13 int go2 =0; 14 15 // 画像のリストを取得 16 TypedArray images = getResources().obtainTypedArray(R.array.r); 17 TypedArray images2 = getResources().obtainTypedArray(R.array.2r); 18 TypedArray images3 = getResources().obtainTypedArray(R.array.3r); 19 TypedArray images4 = getResources().obtainTypedArray(R.array.4r); 20 21 // Randomクラスのインスタンスを生成 22 Random r = new Random(); 23 24 //0以上100未満の整数の乱数を作成する 25 go2 = r.nextInt(100); 26 27 //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する 28 if(go2 <= 2){ 29 go[0].setImageResource(R.array.4r); 30}else 31 //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する 32 if(go2 <= 12){ 33 go[0].setImageResource(R.array.3r); 34}else 35 //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する 36 if(go2 <= 39){ 37 go[0].setImageResource(R.array.2r); 38}else{ 39 //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する 40 go[0].setImageResource(R.array.r); 41}

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

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

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

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

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

guest

回答4

0

「メソッド setImageResource(int) は型 Integer で未定義です」というエラーは、
Integer型(クラス)にsetImageResource(int)というメソッドは定義されていない」、という意味です。
go_rIntegerなので、そのエラーが出ています。

呼出したいのはImageView#setImageResourceだと思いますので、
go[go_r].setImageResource( ... )とすれば良さそうです。

あと、go_rIntegerじゃなくてintにしたほうが良いと思います。
これについては、「オートボクシング」という機能が関係していますので、気になるようでしたら調べてみてください。

投稿2015/06/18 23:25

編集2015/06/18 23:27
argius

総合スコア9388

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

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

0

ベストアンサー

コードのおかしな部分を併せて指摘させていただきます.

lang

1 // 画面に6個の画像表示領域の器を配列で用意 2 go = new ImageView[5]; 3 4 // 配列に画面に配置したImageViewを設定 5 go[0] = (ImageView)findViewById(R.id.v1); 6 go[1] = (ImageView)findViewById(R.id.v2); 7 go[2] = (ImageView)findViewById(R.id.v3); 8 go[3] = (ImageView)findViewById(R.id.v4); 9 go[4] = (ImageView)findViewById(R.id.v5); 10 go[5] = (ImageView)findViewById(R.id.v6);

配列作成時に[]に入れる数字は配列の要素数で,この場合5個になります.
この時使えるインデックスは0-4で,5は存在しません.
なのでgo[5]に代入する際に実行時例外(ArrayIndexOutOfBoundsException)になります.

lang

1 //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する 2 if(go_r <= 2){ 3 go_r.setImageResource(R.array.4r); 4}else 5 //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する 6 if((go_r >= 3) && (go_r <= 12)){ 7 go_r.setImageResource(R.array.ur); 8}else 9 //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する 10 if((go_r >= 13) && (go_r <= 39)){ 11 go_r.setImageResource(R.array.sr); 12}else{ 13 //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する 14 go_r.setImageResource(R.array.r); 15}

まずif-elseにおけるelseには,それより前のifが成立しない場合に入ります.
なので,else以降のif文で&&の前が不要です.
あっても問題はないのですが,無駄な判定処理が入ることになります.

lang

1if(go_r <= 2){ 2}else if(go_r <= 12){ 3}else if(go_r <= 39){ 4}else { 5}

問題のエラーですが,前の方も指摘しているとおり,Integer型のgo_rに対して,Integerに存在しないメソッドsetImageResource(int)を使おうとしていることが原因です.
これはImageViewのメソッドなので,おそらくgo[]のどれかに適用するべきなのでしょう.
その引数の指定も変です.この引数は画像リソースの数値を入れなければならないのですが,
入れているのが配列リソースの値になっています.
コメントからの推測になりますが,こういうことになるのでしょうか?

lang

1if(go_r <= 2){ 2 go[0].setImageDrawable(images4.getDrawable(go_r)); 3}else if(go_r <= 12){ 4 go[0].setImageDrawable(images3.getDrawable(go_r - 3)); 5}else if(go_r <= 39){ 6 go[0].setImageDrawable(images2.getDrawable(go_r - 13)); 7}else { 8 go[0].setImageDrawable(images.getDrawable(go_r - 40)); 9}

投稿2015/06/19 05:07

swordone

総合スコア20651

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

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

0

if文に配列てどのあたりでしょうか?
javaでは if(式) ですので if( 1 ) これはエラーになります。
if( a == 0 ) ←評価式でなければだめです。

エラーと表題が全然違いますね・・・
go_r.setImageResource(R.array.4r);
go_rがIntegerクラスなのでsetImageResourceのメソッドがありません
setImageResourceはAndroidのImageクラスですね

ソース見る限りですと
go[0].setImageResource( R.draable.xxxx ); てのが正しいとおもいます。

投稿2015/06/19 00:30

MasaakiIrie

総合スコア1021

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

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

0

間違ってたらごめん・・
intValue()
Integerクラス

投稿2015/06/18 21:05

cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問