[解決済み] 変数が解決できない
2022-02-12 12:07:38
質問
iとjの変数ごとに異なるアイテムリストを作成しようとしています。私のコードは次のとおりです。
if (i == 0) {
if (j == 0) {
final CharSequence[] items = {"4:45", "5:00"}
} else if (j == 1) {
final CharSequence[] items = {"4:43", "4:58"}
} else if (j == 2) {
final CharSequence[] items = {"4:41", "4:56"}
} else {
final CharSequence[] items = {"4:38", "4:53"}
}
...
new AlertDialog.Builder(this)
.setTitle("Hours")
.setItems(items,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
// getStation(i);
}
})
.show();
}
の行でエラーが発生します。
.setItems(items,
:
items cannot be resolved
とコンパイラは考えているのだと思います。
CharSequence[] items
が初期化されていないとか...。
どうしたらこのプログラムを実行できるようになりますか?
解決方法は?
問題は変数のスコーピングです。
if (someCondition) {
final int i = 666;
} else {
final int i = 42;
}
int j = i + 1; // compile-time error
ここでは、2つのローカル変数
i
を宣言し、初期化した直後にスコープ外に出てしまいます。もし
j
の値が必要です。
i
であれば
i
は、より大きなスコープで宣言されなければならない。
final int i;
if (someCondition) {
i = 666;
} else {
i = 42;
}
int j = i + 1; // compiles fine!
(これはまさに三項演算子が得意とするシナリオであることを述べておく)
final int i = (someCondition) ? 666 : 42;
この場合、残念ながら、配列の初期化の省略記法は、宣言時にのみ使用することができます。つまり
int[] arr1 = { 1, 2, 3 }; // compiles fine!
int[] arr2;
arr2 = { 4, 5, 6 }; // doesn't compile!
の宣言を抜き出すことができます。
items
の外側で
if
を作成し、その都度冗長なコードを書いていますが(Joachim Sauerの回答参照)、より簡潔なコードとしては、代わりにarray-of-arraysを使用することです。
final CharSequence[][] allItems = {
{ "4:45", "5:00" },
{ "4:43", "4:58" },
{ "4:41", "4:56" },
{ "4:38", "4:53" }
};
final CharSequence[] items = allItems[j];
この場合、このテクニックはうまく機能しますが、より一般的なケースで使用したいのは
Map
などがあります。
注:元のコードでは明示されていませんが、これは以下の場合に動作します。
j
はどちらか
0
,
1
,
2
または
3
. 最後のオプションは
j
以外の値である場合
0
,
1
,
2
に設定すると、それをチェックして
3
このコードの前に
関連
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】Android Studioでタスク :app:compileDebugJavaWithJavac の実行に失敗しました。
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] テスト
-
[解決済み] Rが解決できない - Androidエラー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み] テスト