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

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

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

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

Q&A

解決済

2回答

2589閲覧

Android用サイコロアプリの無駄な動作を教えてほしい

sun-solar-arrow

総合スコア113

Android

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

0グッド

0クリップ

投稿2016/04/04 10:03

編集2016/04/05 03:33

本文
うまく動くようになったので改善できるところを教えてください。
(例外は発生しているか試しました)

Java

1package com.mycompany.myappdiceplus; 2import android.app.*; 3import android.os.*; 4import android.widget.*; 5import android.view.View.*; 6import android.view.*; 7import java.util.*; 8import android.media.*; 9import android.content.*; 10import android.widget.AutoCompleteTextView.*; 11 12public class MainActivity extends Activity{ 13 MediaPlayer SE; 14 15 16 protected void onCreate(Bundle savedInstanceState){ 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.main); 19 Button button=(Button)findViewById(R.id.bn); 20 button.setOnClickListener(new OnClickListener(){ 21 public void onClick(View Vector){ 22 23 final EditText DC=(EditText)findViewById(R.id.Dc); 24 TextView math=(TextView)findViewById(R.id.text); 25 math.setText("???"); 26 final EditText MAX=(EditText)findViewById(R.id.MAX); 27 final EditText kai=(EditText)findViewById(R.id.math); 28 SE.start(); 29 int max=0; 30 int dice = 0; 31 32 int kaisu=0; 33 34 35 max=Integer.parseInt(MAX.getText().toString()); 36 dice=Integer.parseInt(DC.getText().toString()); 37 kaisu=Integer.parseInt(kai.getText().toString()); 38 try 39 { 40 Thread.sleep(1500); 41 } 42 catch (InterruptedException e) 43 { 44 e.printStackTrace(); 45 System.exit(1); 46 } 47 int[] sum = new int[kaisu]; 48 StringBuilder strings=new StringBuilder(); 49 int Random = 0; 50 51 int dex=sum.length; 52 dex--; 53 for(int i=0;i<=dex;i++){ 54 sum[i]=new Random().nextInt(max); 55 Random+=sum[i]; 56 } 57 strings.append(Random <= dice ? "成功(" : "失敗("); 58 strings.append(Random).append("="); 59 60 for(int index:sum){ 61 strings.append(index); 62 strings.append(","); 63 } 64 strings.append(")"); 65 66 String ans=strings.toString(); 67 math.setText(ans); 68 } 69 }); 70 } 71 72 @Override 73 protected void onResume() 74 { 75 super.onResume(); 76 SE = MediaPlayer.create(this, R.raw.niconico); 77 78 } 79 80 @Override 81 protected void onDestroy() 82 { 83 onStop(); 84 super.onDestroy(); 85 } 86}

直る前の文
結果:成功か失敗(右の合計=乱数,乱数…)
と表示したいのですが、
結果:成功(0=)
どうしてでしょうか。直し方を教えてください。
一部省く…

try{
max=Integer.parseInt(MAX.getText().toString());
dice=Integer.parseInt(DC.getText().toString());
kaisu=Integer.parseInt(kai.getText().toString());
Thread.sleep(1500);
}
catch (Exception e){
}
int kaisu-1;

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

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

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

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

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

swordone

2016/04/04 14:41

catch節でe.printStackTrace();を記述してどうなるか確認してみてくれませんか?(例外ログが出るかどうか)
sun-solar-arrow

2016/04/04 22:20

例外は起きていないので意味がないと思います。
yona

2016/04/05 00:15

なぜ、例外が発生していないと思うんですか?
sun-solar-arrow

2016/04/05 02:36

いい忘れていましたが試していたからです。
swordone

2016/04/05 02:46 編集

ついでに実行時の各パラメータ(max, kaisuなど)の中身も確認しておいたほうがいいですよ
sun-solar-arrow

2016/04/05 05:49

皆さん、ありがとうございました。最初の質問が解決したためベストアンサーを決めることにしました。 この後も回答しようとしていたかたもいたかもしれませんが申し訳ございません。 皆さんありがとうございました!
guest

回答2

0

ベストアンサー

正直無駄が多く感じ、意味のない操作があるようだったので、肝要な部分だけ抜き出して書きなおしてみました。(Java環境で動くよう乱数発生して合計し判定という部分だけで実行する)

java

1import java.util.Random; 2 3public class Q31458 { 4 5 public static void main(String[] args) { 6 int max = 25; 7 int dice = 100; 8 int kaisu = 5; 9 10 try { 11 Thread.sleep(1500); 12 } catch (Exception e) { 13 e.printStackTrace(); 14 } 15 16 kaisu -= 1; 17 int[] sum = new int[kaisu]; 18 StringBuilder strings = new StringBuilder(); 19 int random = 0; 20 21 Random random2 = new Random(); 22 for (int i = 0; i < kaisu; i++) { 23 sum[i] = random2.nextInt(max); 24 random += sum[i]; 25 } 26 27 strings.append("結果:") 28 .append(random <= dice ? "成功(" : "失敗(") 29 .append(random).append("="); 30 for (int i : sum) { 31 strings.append(i); 32 strings.append(","); 33 } 34 strings.append(")"); 35 36 String ans = strings.toString(); 37 System.out.println(ans); 38 } 39 40}

これを実行した結果、


結果:成功(74=21,10,23,20,)


などのようになり、問題の現象が発生しません。
kaisu -= 1;などの意味不明な操作も気になるのですが、一番問題がありそうなのは、EditTextから取得した文字列を数値に変換する段階で例外が発生している可能性があり、しかもそれがcatch節で握りつぶされてしまっていることです。
その部分のcatchでログを出してチェックするか、catchする例外をInterruptedExceptionに限定するべきです。

投稿2016/04/05 01:27

swordone

総合スコア20651

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

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

sun-solar-arrow

2016/04/05 03:11 編集

直してみました。今はスマホのAIDEで開発しているのでRoot化していないためlogが分からないから IntnrruptedExceptionをcatchするようにし、 catchしたらSystem.exit(1); のように強制終了させるようにしましたが、強制終了はしていませんでした。 無駄な動作を省きやってみます。 しかし、初心者なので無駄な動作というのがあまり分かってません。ですから思い当たるものだけ消してみます。
sun-solar-arrow

2016/04/05 02:55

kaisu-1を消したら動くようになりました。
sun-solar-arrow

2016/04/05 03:21

しかし、 append(random <= dice ? "成功(" : "失敗(") は便利です。一気にコードが短くなりました。 教えて下さりありがとうございました。
guest

0

Java

1kaisu-=1; 2int[] sum = new int[kaisu]; 3StringBuilder strings=new StringBuilder(); 4int Random = 0; 5 6int dex=sum.length-1; 7for(int i=0;i<=dex;i++){ 8sum[i]=new Random().nextInt(max); 9Random+=sum[i]; 10}

ここで常にdexが-1になるので
Randomが常に0になります。
そのためRandom <= diceが常に成り立ち成功になります。

投稿2016/04/04 10:14

yona

総合スコア18155

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

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

sun-solar-arrow

2016/04/04 22:40

次のようになりました。 成功か失敗(合計=) になりました。(失敗にもなるようになり合計もでる) しかし、まだ、=の右に足す前の数が出ません。 (つまり、成功か失敗(合計=足す前)になる)
yona

2016/04/05 00:13

どのように修正して、どのようになったのかさっぱりわかりません。そんな状態で回答できると思いますか? 変更した内容を追記してください。 また、プログラムは専用の記述方法があるので修正してください。
sun-solar-arrow

2016/04/05 02:51

dex=sum.length-1の所を dex=sum.length; dex--;に変えました。 しかし、 専用の記述方法というのはどんなのですか?初心者なので分かりません。そこも教えてください。
yona

2016/04/05 03:18

PCなら質問入力欄の上部にボタンがあるはずです。 ```言語を書く ここにコードを書く ```
sun-solar-arrow

2016/04/05 03:33

スマホなんで気が付きませんでした。
yona

2016/04/05 03:56

確かにスマホだと気づかないですよね。
yona

2016/04/05 04:04

Thread.sleep(1500);している意図は何でしょうか。 意味がないように思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問