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

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

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

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

Q&A

解決済

1回答

1702閲覧

Gravity

TakamasaAwai

総合スコア73

Android

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

0グッド

0クリップ

投稿2015/07/11 15:37

lang

1package com.example.takamasaawai.myapplication; 2 3import android.view.Gravity; 4 5import java.util.Random; 6 7public class TextViewGravity { 8 int[] g; 9 Random r; 10 11 void gravity() { 12 g = new int[]{Gravity.CENTER, Gravity.LEFT, Gravity.RIGHT, Gravity.TOP, 13 Gravity.BOTTOM, Gravity.FILL, Gravity.FILL_VERTICAL, Gravity.FILL_HORIZONTAL, 14 Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, 15 Gravity.TOP | Gravity.CENTER, Gravity.TOP | Gravity.CENTER_HORIZONTAL, Gravity.TOP | Gravity.RIGHT, 16 Gravity.TOP | Gravity.LEFT, Gravity.BOTTOM | Gravity.LEFT, Gravity.BOTTOM | Gravity.RIGHT}; 17 18 19 int[] newlist = new int[g.length]; 20 for (int i = 0; i < g.length; i++) { 21 while (true) { 22 int a = r.nextInt(g.length); 23 newlist[i] = g[a]; 24 break; 25 } 26 } 27 28 g = r.nextInt(g.length); 29 } 30 int[] getG() { 31 return g; 32 } 33 }

いま、こんなオブジェクトでランダムなgravityを生成しているのですが、 g = r.nextInt(g.length);がエラーになります。どうしてでしょうか?また、その他修正点ありましたらお願いします。
ちなみに、メインのクラスで設定しているところは
textView = (TextView) findViewById(R.id.t);
TextViewGravity tvg = new TextViewGravity();
tvg.gravity();
textView.setGravity(tvg.getG());

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

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

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

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

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

guest

回答1

0

ベストアンサー

今gはint型の配列で,それに対してint型のr.nextInt(g.length)を代入しようとしているためです.

他には

lang

1 int[] newlist = new int[g.length]; 2 for (int i = 0; i < g.length; i++) { 3 while (true) { 4 int a = r.nextInt(g.length); 5 newlist[i] = g[a]; 6 break; 7 } 8 }

これが配列の並び替えなら,これではダメです.同じ要素が重複して並ぶ可能性があります.

lang

1 textView.setGravity(tvg.getG());

getG()はint型配列を返すので,int型を引数に取るsetGravityには渡せません.

lang

1 textView.setGravity(tvg.getG()[0]);

こういう形なら可能ですが.

Gravity値をランダムに出したいだけならわざわざ並び替えをする必要もなく,

lang

1package com.example.takamasaawai.myapplication; 2 3import android.view.Gravity; 4 5import java.util.Random; 6 7public class TextViewGravity { 8 int[] g = {Gravity.CENTER, Gravity.LEFT, Gravity.RIGHT, Gravity.TOP, 9 Gravity.BOTTOM, Gravity.FILL, Gravity.FILL_VERTICAL, Gravity.FILL_HORIZONTAL, 10 Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL, 11 Gravity.TOP | Gravity.CENTER, Gravity.TOP | Gravity.CENTER_HORIZONTAL, Gravity.TOP | Gravity.RIGHT, 12 Gravity.TOP | Gravity.LEFT, Gravity.BOTTOM | Gravity.LEFT, Gravity.BOTTOM | Gravity.RIGHT}; 13 Random r = new Random(); 14 15 int getRndGravity() { 16 return g[r.nextInt(g.length)]; 17 } 18}

これで事足ります.
また,個人的にはわざわざインスタンス化する必要もない気がします.
int g[]private static int g[] にして,
Random rの行を消して,

lang

1 public static int getRndGravity() { 2 return g[(int)(Math.random() * g.length)]; 3 }

これで呼び出すときTextViewGravity.getRndGravity()とすれば,
gから毎回ランダムに値が取り出されます.

投稿2015/07/11 15:46

編集2015/07/12 03:48
swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問