teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

並び替えの手順をバッサリカット

2015/07/12 03:48

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -20,4 +20,37 @@
20
20
  ```lang-java
21
21
  textView.setGravity(tvg.getG()[0]);
22
22
  ```
23
- こういう形なら可能ですが.
23
+ こういう形なら可能ですが.
24
+
25
+ Gravity値をランダムに出したいだけならわざわざ並び替えをする必要もなく,
26
+ ```lang-java
27
+ package com.example.takamasaawai.myapplication;
28
+
29
+ import android.view.Gravity;
30
+
31
+ import java.util.Random;
32
+
33
+ public class TextViewGravity {
34
+ int[] g = {Gravity.CENTER, Gravity.LEFT, Gravity.RIGHT, Gravity.TOP,
35
+ Gravity.BOTTOM, Gravity.FILL, Gravity.FILL_VERTICAL, Gravity.FILL_HORIZONTAL,
36
+ Gravity.CENTER_VERTICAL, Gravity.CENTER_VERTICAL,
37
+ Gravity.TOP | Gravity.CENTER, Gravity.TOP | Gravity.CENTER_HORIZONTAL, Gravity.TOP | Gravity.RIGHT,
38
+ Gravity.TOP | Gravity.LEFT, Gravity.BOTTOM | Gravity.LEFT, Gravity.BOTTOM | Gravity.RIGHT};
39
+ Random r = new Random();
40
+
41
+ int getRndGravity() {
42
+ return g[r.nextInt(g.length)];
43
+ }
44
+ }
45
+ ```
46
+ これで事足ります.
47
+ また,個人的にはわざわざインスタンス化する必要もない気がします.
48
+ `int g[]`→`private static int g[]` にして,
49
+ `Random r`の行を消して,
50
+ ```lang-java
51
+ public static int getRndGravity() {
52
+ return g[(int)(Math.random() * g.length)];
53
+ }
54
+ ```
55
+ これで呼び出すとき`TextViewGravity.getRndGravity()`とすれば,
56
+ gから毎回ランダムに値が取り出されます.

1

他の訂正点

2015/07/12 03:48

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,1 +1,23 @@
1
- 今gは**int型の配列**で,それに対して**int型**のr.nextInt(g.length)を代入しようとしているためです.
1
+ 今gは**int型の配列**で,それに対して**int型**のr.nextInt(g.length)を代入しようとしているためです.
2
+
3
+ 他には
4
+ ```lang-java
5
+ int[] newlist = new int[g.length];
6
+ for (int i = 0; i < g.length; i++) {
7
+ while (true) {
8
+ int a = r.nextInt(g.length);
9
+ newlist[i] = g[a];
10
+ break;
11
+ }
12
+ }
13
+ ```
14
+ これが配列の並び替えなら,これではダメです.同じ要素が重複して並ぶ可能性があります.
15
+
16
+ ```lang-java
17
+ textView.setGravity(tvg.getG());
18
+ ```
19
+ getG()はint型配列を返すので,int型を引数に取るsetGravityには渡せません.
20
+ ```lang-java
21
+ textView.setGravity(tvg.getG()[0]);
22
+ ```
23
+ こういう形なら可能ですが.