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

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

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

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

Android

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

Eclipse

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

Q&A

解決済

3回答

6945閲覧

javaでランダムに画像を数個出すコード

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/05 05:54

編集2015/06/05 09:23

javaでランダムに画像を数個出す方法が分かりません。
AndroidアプリをeclipseでJavaを使って作成中のプログラム初心者です。

MainActivityにあるボタンを押してサブクラスを開いた際、開いた先のクラスにランダムで画像を数個表示するようにしたいのですが、上手くいかず困っています。
数日に渡ってwebで検索もしたのですが、ランダムで数字や文字を出す、ボタンを押すとランダムで画像を表示、もぐら叩きゲームのようにランダムの位置に画像を表示、辺りのやり方は発見できたのですが、『固定した位置に、決められた数だけランダムで画像を表示(画像は被っても良い)』というものは発見できませんでした。
前述したプログラム達の改変や応用も試みたのですが、知識不足の為、どれも上手くいきませんでした。
どうかそういった事の出来るコードや、そういったコードの掲載されているホームページなどありましたら教えていただけないでしょうか。
よろしくお願いします。

追記:
沢山の解答ありがとうございます!
画像10枚をstrings.xmlにて配列にはしてあります
.javaではjava.util.Random;もインポートしました
数字の乱数の出し方は分かるのですが、それを画像表示に応用する方法が分からず困っています。
コードの何処に決めた配列名を入力すれば数字の時のように画像をランダムに決まった数表示できるのかが分かりません…
画像10枚の配列名:rgazou
変数の宣言:ImageView rgazou[];
配列の要素数:rgazou = new ImageView[10];
ここまでは出来たのですがこれを乱数とどう絡めたらいいのかが分からず困っています

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

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

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

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

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

guest

回答3

0

ベストアンサー

・決まった位置に決まった画像を出すことはできますか?
・乱数は使えますか?

ここまでできるのなら
画像を配列に格納して表示する画像を乱数で指定してあげればよいと思います。

投稿2015/06/05 07:03

kutsulog

総合スコア985

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

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

mari_tom

2015/06/05 08:44

>決まった位置に決まった画像 はグラフィックレイアウトやImageViewを使って何とか出来ます 乱数は数字なら何とか理解できますが、画像となるとどうやっていいか分からなくなってしまいます… 画像を配列に格納はできました。strings.xmlで指定しました。ではこの配列を乱数で指定出来れば良いということのでしょうか? お手数をおかけしますが、画像を乱数で指定する方法を教えていただけないでしょうか… よろしくお願いします!
kutsulog

2015/06/05 11:40

追記見ました そこまでできたら ImageViewの添字をランダムな数字にするだけです Random rand = new Random(); gazou[rand.nextInt() % (gazou.length - 1)]; とやればランダムで画像指定できるはずです
kutsulog

2015/06/05 11:45

訂正 gazou[rand.nextInt() % (gazou.length - 1)]; ↓ gazou[rand.nextInt() % gazou.length]; 長さで割ったあまりを使うので-1は必要ないですね(^^;
mari_tom

2015/06/05 13:46

アドバイスありがとうございます! 早速こうコードを打ってみたのですが(ランダム要素のコードのみ抜粋) public class SubActivity extends Activity { ImageView rgazou[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); rgazou = new ImageView[10]; Random rand = new Random(); rgazou[rand.nextInt() % rgazou.length]; ImageView rgazou = new ImageView(this); TypedArray images = getResources().obtainTypedArray(R.array.rgazou); Drawable drawable = images.getDrawable(10); gazou[rand.nextInt() % gazou.length]; の所で『型 構文エラーがあります。"AssignmentOperator Expression" を挿入して Expression を完了してください』というエラーが起きてしまいます 「画像を表示」と「画像をランダムに表示」がこんがらがってしまい、無茶苦茶なコードになってしまっているのですが、どう直していいかさっぱり分からなり途方に暮れています もっとシンプルにまとめる方法はないものでしょうか…
mari_tom

2015/06/05 14:26

アドバイスありがとうございます! 早速こうコードを打ってみたのですが(ランダム要素のコードのみ抜粋) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); ImageView imgview = new ImageView(this); TypedArray images = getResources().obtainTypedArray(R.array.rgazou); Drawable drawable = images.getDrawable(10); ImageView rgazou[]; Random rand = new Random(); rgazou[rand.nextInt() % rgazou.length]; gazou[rand.nextInt() % gazou.length]; の所で『型 構文エラーがあります。"AssignmentOperator Expression" を挿入して Expression を完了してください』というエラーが起きてしまいます 「画像を表示」と「画像をランダムに表示」がこんがらがってしまい、無茶苦茶なコードになってしまっているのですが、どう直していいかさっぱり分からなり途方に暮れています もっとシンプルにまとめる方法はないものでしょうか…
kutsulog

2015/06/05 14:36

ランダムな添字を当てるところを間違えました (ついでにrand.nextInt()の使い方も間違えてましたし…) もともとimages.getDrawable(10)で 10番目の画像を取得したわけですよね? ランダムにするには何番目かの指定をランダムにすれば言い訳です setContentView(R.layout.sub); ImageView rgazou = new ImageView(this); // リソースから画像を取得 TypedArray images = getResources().obtainTypedArray(R.array.rgazou); // ランダムクラス生成 Random rand = new Random(); // リソース定義分までの乱数でどの画像を使うか指定して画像を取得 Drawable drawable = images.getDrawable(rand.nextInt(images.length)); これでいかがでしょう
kutsulog

2015/06/05 14:47

Drawable drawable = images.getDrawable(rand.nextInt(images.length)); ここをもうちょっと分けて書くと // 配列の長さを越えない乱数を取得 int num = rand.nextInt(images.length); (または int num = rand.nextInt() % images.length) // 得られた値の場所の画像を表示 Drawable drawable = images.getDrawable(num);
mari_tom

2015/06/05 15:14

遅くまでありがとうございます!お疲れ様です! 一つだけ質問させていただきたいのですが、よろしいでしょうか? Drawable drawable = images.getDrawable(rand.nextInt(images.length)); int num = rand.nextInt(images.length); のlengthの部分で『型 length は解決できないか、フィールドではありません』というエラーが出てしまいます length();にするかとeclipse側が聞いてくるのですが、そう変えてしまうとエラーの消える代わり「ローカル変数drawableの値が使用されていません」「ローカル変数rgazouの値は使用されていません」という黄色い警告マークが出ます この警告マーク状態でエミュレータにかけても、ランダムに画像は出てきていませんでした 他は全て分かりやすいコードでエラーも無かったので、ありがたかったです
kutsulog

2015/06/05 15:39

images.lengthは()抜けてますのでimages.length()にしてください 画像が表示されないのはImageViewにセットしていないからです 画像を取得した後に rgazou.setImageDrawable(drawable) で画像を表示しませんか?
mari_tom

2015/06/05 16:04

重ね重ねすみません、ありがとうございます!setImageDrawableを失念していました、早速修正しました! エラーは出なくなったのですが、画像が出ません…しかし沢山ヒントを頂戴して何か掴めそうな気がしてきたので、ここから先はしばらく自分で考えて色々試してみます。 たくさんのアドバイス、本当にありがとうございました!
kutsulog

2015/06/05 16:25

たぶんonCreateのなかでつくったImageViewにセットしちゃってるから onCreateのスコープを抜けたときに消えちゃってるんでしょうね ↓ではいかが? public class SubActivity extends Activity { ImageView rgazou[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); // 画面に10個の画像表示領域の器を配列で用意 rgazou = new ImageView[10]; // 配列に画面に配置したImageViewを設定 rgazou[0] = (ImageView)findViewById(R.id.[1こ目のid]); rgazou[1] = (ImageView)findViewById(R.id.[2こ目のid]); rgazou[2] = (ImageView)findViewById(R.id.[3こ目のid]); rgazou[3] = (ImageView)findViewById(R.id.[4こ目のid]); rgazou[4] = (ImageView)findViewById(R.id.[5こ目のid]); rgazou[5] = (ImageView)findViewById(R.id.[6こ目のid]); rgazou[6] = (ImageView)findViewById(R.id.[7こ目のid]); rgazou[7] = (ImageView)findViewById(R.id.[8こ目のid]); rgazou[8] = (ImageView)findViewById(R.id.[9こ目のid]); rgazou[9] = (ImageView)findViewById(R.id.[10こ目のid]); // 画像のリストを取得 TypedArray images = getResources().obtainTypedArray(R.array.rgazou); // Randomクラスのインスタンスを生成 Random rand = new Random(); // 各ImageViewに画像を設定 for(ImageView tmp : rgazou) { tmp.setImageDrawable(images.getDrawable(rand.nextInt(images.length()))); }
mari_tom

2015/06/05 17:46

ありがとうございます!遂に画像をランダムで表示することが出来ました!! 私の知識不足のせいで多々お手数をおかけしてしまってすみませんでした。 最初から最後までお世話になりっぱなしですみませんでした、本当にありがとうございました!
guest

0

「ボタンを押すとランダムで画像を表示」を,表示したい画像の数だけ繰り返せばいいのです.


xmlでは様々な配列を定義できます.→Androidで様々な配列をリソースとして定義する
「サブクラスを開く」というのは,別のActivityを起動するということでしょうか?
とにかく画像を表示するActivityに画像を表示するためのレイアウト(LinearLayoutなど)を用意しておき,そこに選んだ画像を入れる,という形が自然かと思います.

投稿2015/06/05 07:10

編集2015/06/05 09:28
swordone

総合スコア20651

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

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

mari_tom

2015/06/05 13:32

ご教示ありがとうございます。 >サブクラスを開く=別のActivityを起動 はい、そうです。 TypedArray images = getResources().obtainTypedArray(R.array.rgazou); Drawable drawable = images.getDrawable(10); で画像を表示することは出来ましたが、未だランダムには表示できておりません…
swordone

2015/06/05 13:35

最後の引数をランダム関数で生成すればいいはずです
mari_tom

2015/06/05 14:14

Random rand = new Random(); rgazou = new ImageView[10]; int rgazou = rand.nextInt(10); System.out.println(rgazou); これで動作確認したいと思ったのですが、何故かapkが表示されなくなってしまいました これまではちゃんとエミュレータで動作確認できていたのですが。エラーは出ていないので不思議です
guest

0

Random rand = new Random();
rand.nextInt();

ではだめでしょうか?
完全にランダムな感じがいいのでしたら
System.currenttimemillis();
これで固定数で除算する方法もあります

int rand = (int)(System.currenttimemillis() % 10) ←10種類の場合

固定位置でしたら
int rand = (int)(System.currenttimemillis() % 5) ←5種類の場合
int x[] = { 0, 10, 20, 30, 40 };
int y[] = { 0, 10, 20, 30, 40 };

DrawImage( img, x[rand], y[rand] );
でいかがでしょうか?

投稿2015/06/05 06:20

MasaakiIrie

総合スコア1021

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

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

mari_tom

2015/06/05 09:31

コードありがとうございます。 Random rand = new Random(); rand.nextInt(); まではエラーも出ず順調なのですが、そこから下のコードを入れるとエラーが出てしまいます 色々試したのですが、自分には難しくて上手くできませんでした…申し訳ないです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問