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

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

ただいまの
回答率

90.61%

  • Java

    13490questions

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

  • Android

    6401questions

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

  • Eclipse

    1639questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,091

mari_tom

score 4

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

import java.util.Random;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class SubActivity extends Activity {

    ImageView go[];

    @SuppressLint("UseValueOf")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sub);
    // 画面に6個の画像表示領域の器を配列で用意
    go = new ImageView[5];

    // 配列に画面に配置したImageViewを設定
    go[0] = (ImageView)findViewById(R.id.v1);
    go[1] = (ImageView)findViewById(R.id.v2);
    go[2] = (ImageView)findViewById(R.id.v3);
    go[3] = (ImageView)findViewById(R.id.v4);
    go[4] = (ImageView)findViewById(R.id.v5);
    go[5] = (ImageView)findViewById(R.id.v6);

        //整数を入れる為の変数を宣言
        int go2;
        Integer go_r = new Integer(go2);

    // 画像のリストを取得
    TypedArray images = getResources().obtainTypedArray(R.array.r);
    TypedArray images2 = getResources().obtainTypedArray(R.array.2r);
    TypedArray images3 = getResources().obtainTypedArray(R.array.3r);
    TypedArray images4 = getResources().obtainTypedArray(R.array.4r);

    // Randomクラスのインスタンスを生成
    Random r = new Random();

        //0以上100未満の整数の乱数を作成する
        go_r = r.nextInt(100);

        //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する
        if(go_r <= 2){
        go_r.setImageResource(R.array.4r);
}else
        //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する
        if((go_r >= 3) && (go_r <= 12)){
        go_r.setImageResource(R.array.3r);
}else
        //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する
        if((go_r >= 13) && (go_r <= 39)){
        go_r.setImageResource(R.array.2r);
}else{
        //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する
        go_r.setImageResource(R.array.r);
}
なにとぞよろしくお願いします。

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

    // 配列に画面に配置したImageViewを設定
    go[0] = (ImageView)findViewById(R.id.v1);
    go[1] = (ImageView)findViewById(R.id.v2);
    go[2] = (ImageView)findViewById(R.id.v3);
    go[3] = (ImageView)findViewById(R.id.v4);
    go[4] = (ImageView)findViewById(R.id.v5);
    go[5] = (ImageView)findViewById(R.id.v6);

        //整数を入れる為の変数を宣言
        int go2 =0;

    // 画像のリストを取得
    TypedArray images = getResources().obtainTypedArray(R.array.r);
    TypedArray images2 = getResources().obtainTypedArray(R.array.2r);
    TypedArray images3 = getResources().obtainTypedArray(R.array.3r);
    TypedArray images4 = getResources().obtainTypedArray(R.array.4r);

    // Randomクラスのインスタンスを生成
    Random r = new Random();

        //0以上100未満の整数の乱数を作成する
        go2 = r.nextInt(100);

        //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する
        if(go2 <= 2){
        go[0].setImageResource(R.array.4r);
}else
        //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する
        if(go2 <= 12){
        go[0].setImageResource(R.array.3r);
}else
        //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する
        if(go2 <= 39){
        go[0].setImageResource(R.array.2r);
}else{
        //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する
        go[0].setImageResource(R.array.r);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+5

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

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

コードのおかしな部分を併せて指摘させていただきます.
    // 画面に6個の画像表示領域の器を配列で用意
    go = new ImageView[5];

    // 配列に画面に配置したImageViewを設定
    go[0] = (ImageView)findViewById(R.id.v1);
    go[1] = (ImageView)findViewById(R.id.v2);
    go[2] = (ImageView)findViewById(R.id.v3);
    go[3] = (ImageView)findViewById(R.id.v4);
    go[4] = (ImageView)findViewById(R.id.v5);
    go[5] = (ImageView)findViewById(R.id.v6);
配列作成時に[]に入れる数字は配列の要素数で,この場合5個になります.
この時使えるインデックスは0-4で,5は存在しません.
なのでgo[5]に代入する際に実行時例外(ArrayIndexOutOfBoundsException)になります.
        //ランダムで出た数が2以下なら4rの配列から1枚画像を表示する
        if(go_r <= 2){
        go_r.setImageResource(R.array.4r);
}else
        //ランダムで出た数が3以上12以下なら3rの配列から1枚画像を表示する
        if((go_r >= 3) && (go_r <= 12)){
        go_r.setImageResource(R.array.ur);
}else
        //ランダムで出た数が13以上39以下なら2rの配列から1枚画像を表示する
        if((go_r >= 13) && (go_r <= 39)){
        go_r.setImageResource(R.array.sr);
}else{
        //それ以外(それ以降)の数字ならrの配列から1枚画像を表示する
        go_r.setImageResource(R.array.r);
}
まずif-elseにおけるelseには,それより前のifが成立しない場合に入ります.
なので,else以降のif文で&&の前が不要です.
あっても問題はないのですが,無駄な判定処理が入ることになります.
if(go_r <= 2){
}else if(go_r <= 12){
}else if(go_r <= 39){
}else {
}
問題のエラーですが,前の方も指摘しているとおり,Integer型のgo_rに対して,Integerに存在しないメソッドsetImageResource(int)を使おうとしていることが原因です.
これはImageViewのメソッドなので,おそらくgo[]のどれかに適用するべきなのでしょう.
その引数の指定も変です.この引数は画像リソースの数値を入れなければならないのですが,
入れているのが配列リソースの値になっています.
コメントからの推測になりますが,こういうことになるのでしょうか?
if(go_r <= 2){
    go[0].setImageDrawable(images4.getDrawable(go_r));
}else if(go_r <= 12){
    go[0].setImageDrawable(images3.getDrawable(go_r - 3));
}else if(go_r <= 39){
    go[0].setImageDrawable(images2.getDrawable(go_r - 13));
}else {
    go[0].setImageDrawable(images.getDrawable(go_r - 40));
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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 ); てのが正しいとおもいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13490questions

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

  • Android

    6401questions

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

  • Eclipse

    1639questions

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