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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

22608閲覧

おみくじアプリで確率を設定したい

kimura

総合スコア59

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2015/07/16 13:09

編集2015/07/17 14:47

Android Studioでおみくじアプリを作っています。
大吉5%・中吉20%・吉50%・凶20%・大凶5%の確率に設定する場合、どのように書いていけばよろしいのでしょうか?

よろしくお願い致します

public void getOmikuji(View view) {
// TextViewの取得
TextView tv = (TextView) findViewById(R.id.myTextView);
String[] results = {
"大吉",
"中吉",
"吉",
"凶",
"大凶"
};
// 乱数の生成
Random randomGenerator = new Random();
int num = randomGenerator.nextInt(results.length); // 0-2
// 結果の表示
// String result = Integer.toString(num);

if (num == 0) { tv.setTextColor(Color.rgb(230, 180, 34)); } else if (num == 1) { tv.setTextColor(Color.rgb(192, 192, 192)); } else if (num == 2) { tv.setTextColor(Color.rgb(196, 112, 34)); } else if (num == 3) { tv.setTextColor(Color.rgb(0, 0, 0)); } else { tv.setTextColor(Color.rgb(128, 0, 0)); } tv.setText(results[num]); }

}

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

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

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

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

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

guest

回答3

0

ベストアンサー

あくまで1例ですが

Java

1Random random = new Random(); 2int num = random.nextInt(20); 3if (num == 0) { 4 // 大吉 5} else if (1 <= num && num <= 4) { 6 // 中吉 7} else if (5 <= num && num <= 14) { 8 // 吉 9} else if (15 <= num && num <= 18) { 10 // 凶 11} else { // num == 19 12 // 大凶 13}

投稿2015/07/16 13:30

shiolier

総合スコア1156

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

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

kimura

2015/07/16 14:45

回答ありがとうございます。 そのままコピペだけではダメなのでしょうか? 「unfortunately (アプリ名) has stopped」とエラーになってしまい、今度はどこを修正するのかわからず・・・ 何度もお手数で申し訳ありませんが、修正するとこをわかればお力を貸していただければ助かります。 何卒宜しくお願い致します。
swordone

2015/07/16 14:57

デバッグでそれが起きたのなら,Logcatにログが出ているはずです. それを貼って下さい.
kimura

2015/07/16 15:26

すいません 下記が赤い文字で書いてある部分です。 07-16 15:25:23.303 21409-21409/com.dotinstall.myomikujiapp E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.dotinstall.myomikujiapp, PID: 21409 java.lang.IllegalStateException: Could not execute method of the activity at android.view.View$1.onClick(View.java:4020) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4015)             at android.view.View.performClick(View.java:4780)             at android.view.View$PerformClick.run(View.java:19866)             at android.os.Handler.handleCallback(Handler.java:739)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=12 at com.dotinstall.myomikujiapp.MainActivity.getOmikuji(MainActivity.java:47)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at android.view.View$1.onClick(View.java:4015)             at android.view.View.performClick(View.java:4780)             at android.view.View$PerformClick.run(View.java:19866)             at android.os.Handler.handleCallback(Handler.java:739)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
swordone

2015/07/16 15:46

numを配列のインデックスに使ったせいですね 今numは乱数で0-19の範囲を取るので,resultsの長さ5以上の値が入る事による例外です. numをインデックスに使うのではなく,if文の中でresultsから文字列を選んで使います. num <=4のときresults[1]を使う,という様に.
kimura

2015/07/17 14:15

何度もありがとうございます。 下記に書き換えてみました。 public void getOmikuji(View view) { // TextViewの取得 TextView tv = (TextView) findViewById(R.id.myTextView); String[] results = { "大吉", "中吉", "吉", "凶", "大凶" }; // 乱数の生成 Random random = new Random(); int num = random.nextInt(100); if (num < 5) { // 大吉 tv.setTextColor(Color.rgb(230, 180, 34)); tv.setText(results[0]); } else if (num < 25) { // 中吉 tv.setTextColor(Color.rgb(192, 192, 192)); tv.setText(results[1]); } else if (num < 75) { // 吉 tv.setTextColor(Color.rgb(196, 112, 34)); tv.setText(results[2]); } else if (num < 95) { // 凶 tv.setTextColor(Color.rgb(0, 0, 0)); tv.setText(results[3]); } else { // num == 19 // 大凶 tv.setTextColor(Color.rgb(0, 0, 0)); tv.setText(results[4]); } tv.setText(results[num]); } } そうしましたら、logcatで下記のようなエラーになってしまいました。 07-17 14:10:09.097 2285-2285/com.dotinstall.myomikujiapp E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.dotinstall.myomikujiapp, PID: 2285 java.lang.IllegalStateException: Could not execute method of the activity at android.view.View$1.onClick(View.java:4020) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4015) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=50 at com.dotinstall.myomikujiapp.MainActivity.getOmikuji(MainActivity.java:57) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4015) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 大変申し訳ありませんが何が問題なのでしょうか? 何度も質問して申し訳ありません。
shiolier

2015/07/17 14:41

前と同じく配列の範囲外アクセスが原因です。 `Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=50` 上記はlenghtが5(0 ~ 4)の配列の50番目にアクセスしたという意味です。 まだ`tv.setText(results[num]);`と書いてあるせいですね。 `at com.dotinstall.myomikujiapp.MainActivity.getOmikuji(MainActivity.java:57)` この行から分かる通り、57行目にあるはずです。 スタックトレースからは、そういった「どのクラスの何行目で、何が原因で例外が発生したのか」がしっかり記されています。 例外はプロのプログラマーにおいても日常茶飯事です。慣れないうちは難しいとは思いますが、理解できる様にならないと、例外が発生する度に立ち往生することになってしまいます。頑張って下さい。
swordone

2015/07/17 14:45 編集

tv.setText(results[num]); ↑これが残っているせいでは? あと,この手の問題は言語のタグを付けたほうがいいかと思います. 今回の場合「Java」を.
kimura

2015/07/17 14:50

何度もありがとうございます。 まずはタグにjavaを追加させていただきました。 ご指摘ありがとうございます。 エラーの見方も勉強になりました。 どこがエラーになってるか分かるのですね 本当に何度も申し訳ありませんでした。 再度チャレンジしてみます。
kimura

2015/07/17 15:00

何度も何度もしつこくすいませんでした。 おかげさまでできました。 本当に感謝です。
guest

0

例外の種類からはエラーの内容を判別できませんでした。
at com.dotinstall.myomikujiapp.MainActivity.getOmikuji(MainActivity.java:57)

MainActivity.javaの57行目は、getOmikujiのどのコードに当たりますか?

投稿2015/07/17 14:31

iwamoto_takaaki

総合スコア2883

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

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

kimura

2015/07/17 14:52

回答していただきありがとうございます。 57行目は、tv.setText(results[num]);になります。
kimura

2015/07/17 15:03

ありがとうございます。 ご指摘の57行目が原因でした。 おかげでできました。 素人で申し訳ありませんでした。 ベストアンサーにせず申し訳ありません。
iwamoto_takaaki

2015/07/17 15:13

ホントだ・・・残ってた・・・A-ha!
guest

0

生成する数値を0から99までの値にして、下記の条件にすると確率を作れます。
0−4 大吉
5−24 中吉
25ー74 吉
75ー94 凶
95−99 大凶
(もちろん、0から19までの数字でも良いのですが、こちらの方がパーセンテージがわかりやすい。)

ちなみに、setTextも条件式内で設定する必要が出ます。

投稿2015/07/16 13:35

iwamoto_takaaki

総合スコア2883

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

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

kimura

2015/07/16 14:36

回答ありがとうございます。 設定ですか?素人でして、もし宜しければソースを書いていただけると助かります。 お手数ですが何卒よろしくお願い致します。
iwamoto_takaaki

2015/07/16 15:19

harf_sleepingさんとソース的にはほぼ同じです。 (と言うかこちらの回答が遅かった。。。) こんな感じです。 Random random = new Random(); int num = random.nextInt(100); if (num < 5) { // 大吉 tv.setTextColor(Color.rgb(230, 180, 34)); tv.setText(results[0]); } else if (num < 25) { // 中吉 ....
kimura

2015/07/17 14:15

何度もありがとうございます。 下記に書き換えてみました。 public void getOmikuji(View view) { // TextViewの取得 TextView tv = (TextView) findViewById(R.id.myTextView); String[] results = { "大吉", "中吉", "吉", "凶", "大凶" }; // 乱数の生成 Random random = new Random(); int num = random.nextInt(100); if (num < 5) { // 大吉 tv.setTextColor(Color.rgb(230, 180, 34)); tv.setText(results[0]); } else if (num < 25) { // 中吉 tv.setTextColor(Color.rgb(192, 192, 192)); tv.setText(results[1]); } else if (num < 75) { // 吉 tv.setTextColor(Color.rgb(196, 112, 34)); tv.setText(results[2]); } else if (num < 95) { // 凶 tv.setTextColor(Color.rgb(0, 0, 0)); tv.setText(results[3]); } else { // num == 19 // 大凶 tv.setTextColor(Color.rgb(0, 0, 0)); tv.setText(results[4]); } tv.setText(results[num]); } } そうしましたら、logcatで下記のようなエラーになってしまいました。 07-17 14:10:09.097 2285-2285/com.dotinstall.myomikujiapp E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.dotinstall.myomikujiapp, PID: 2285 java.lang.IllegalStateException: Could not execute method of the activity at android.view.View$1.onClick(View.java:4020) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4015)             at android.view.View.performClick(View.java:4780)             at android.view.View$PerformClick.run(View.java:19866)             at android.os.Handler.handleCallback(Handler.java:739)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=50 at com.dotinstall.myomikujiapp.MainActivity.getOmikuji(MainActivity.java:57)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at android.view.View$1.onClick(View.java:4015)             at android.view.View.performClick(View.java:4780)             at android.view.View$PerformClick.run(View.java:19866)             at android.os.Handler.handleCallback(Handler.java:739)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 大変申し訳ありませんが何が問題なのでしょうか? 何度も質問して申し訳ありません。
kimura

2015/07/17 15:01

何度も助けていただきありがとうございました。 おかげでできました。 大変感謝してます。 1人しかベストアンサーにできないのが心苦しいですが申し訳ありません。
iwamoto_takaaki

2015/07/17 15:15

いえいえ。 このくらいのバグってクイズみたいで楽しめました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問