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

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

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

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

Q&A

解決済

3回答

1240閲覧

スコープについて(Java)

nagomi72

総合スコア51

Java

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

0グッド

0クリップ

投稿2018/04/30 02:49

編集2018/04/30 04:00

電卓の1部分をつくっています。
現在、23,36,39,56行目でシンボルが見つからないというエラーが発生しています。(エラー箇所に★をつけています)
スコープの問題と感じているのですが、例えば23行目、数字と判定したのちに配列であるw_expression_fieldに追加するにはどのようにすればいいのでしょうか。
上記、if文の外で宣言することで解決しました。
56行目のエラーに取り組みたいと思います。

ご教授のほどよろしくお願いいたします。

import java.io.;
import java.util.
;

class Test {
int w_judge_count = 0; // 奇数回、偶数回の判定に使う

public static void main(String[] args) { ArrayList<String> w_expression_field = new ArrayList<String>(); while (true) { int w_judge_count = 0; // 奇数回、偶数回の判定に使う boolean w_number_judge = true; // 数字かどうかの判定に使う boolean w_operand_judge = true; // 演算子かどうかの判定 String w_changed_input_number = " "; String w_changed_input_operand = " "; if (w_judge_count % 2 == 0) { // 偶数回なら数字か判定 while (w_number_judge) { // 数字が入力されない限りループ System.out.println("数字を入力してください"); BufferedReader w_input_number = new BufferedReader(new InputStreamReader(System.in)); w_changed_input_number = w_input_number.readLine();// 入力された文字の型をStringに変換 w_number_judge = isJudgeNumber(w_changed_input_number); // falseが返ってこれば抜けれる } } w_expression_field.add(w_changed_input_number);// 入力された値を代入 if (w_judge_count % 2 != 0) { // 奇数回なら演算子か判定 //else ifでいけるか要検討 while (w_operand_judge) { System.out.println("演算子を入力してください"); BufferedReader w_input_operand = new BufferedReader(new InputStreamReader(System.in)); w_changed_input_operand = w_input_operand.readLine();// 入力された文字の型をStringに変換 w_operand_judge = isJudgeOperand(w_changed_input_operand); // falseが返ってこれば抜けれる } } if (w_changed_input_operand.equals("=")) { break; } w_expression_field.add(w_changed_input_operand);// 入力された値を代入 } // System.out.println("ループから抜け出しました"); } public static boolean isJudgeNumber(String p_number) { try { Integer.parseInt(p_number); return false; } catch (NumberFormatException e) { return true; } } public static boolean isJudgeOperand(String p_operand) { if (w_judge_count < 3 && p_operand.equals("=")) { // 最初に=を入力されないように ★ return true; } else if (p_operand.equals("+") || p_operand.equals("-") || p_operand.equals("*") || p_operand.equals("/")) { // 演算子ならfalseを返し、ループを抜ける return false; } else { return true; } }

}```

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/04/30 02:50

コードが読みづらい。何をすべきかわかるよな?
退会済みユーザー

退会済みユーザー

2018/04/30 02:53

スコープについてってわかってんじゃん答えは必要ないよね
swordone

2018/04/30 03:08 編集

このままEclipseとかのIDEに突っ込めば答え出そうな
guest

回答3

0

この手の問題はインデントが適切であればすぐ気が付くはずです。

投稿2018/04/30 04:02

HogeAnimalLover

総合スコア4830

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

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

0

ベストアンサー

java

1 int w_judge_count = 0; //奇数回、偶数回の判定に使う 2 boolean w_number_judge = true; //数字かどうかの判定に使う 3 boolean w_operand_judge = true; //演算子かどうかの判定に使う 4 5 if(w_judge_count % 2 == 0){ //偶数回なら数字か判定 6 while(w_number_judge){ //数字が入力されない限りループ 7 System.out.println("数字を入力してください"); 8 BufferedReader w_input_number = new BufferedReader(new InputStreamReader(System.in)); 9 String w_changed_input_number = w_input_number.readLine();//入力された文字の型をStringに変換 10 11 w_number_judge = isJudgeNumber(w_changed_input_number ); //falseが返ってこれば抜けれる 12 } 13 14 } 15 w_expression_field.add(w_changed_input_number);//入力された値を代入 ★

逆に聞きますが、w_judge_countが奇数の場合はw_changed_input_numberは計算されないことになりますが、この場合はどうするつもりですか?
他のエラーに関しても似たような問題です。

投稿2018/04/30 03:17

swordone

総合スコア20649

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

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

nagomi72

2018/04/30 03:53

質問に対する回答になっているかは分かりかねますが... 今回の電卓では乗算、除算を優先したいと考えています。 入力された文字を計算せずに配列に保持し、=が入力されて 始めて計算を始める処理にしようと考えています(漠然としたイメージでは*と/を配列から探し出し、その前後を計算。その後足し算引き算を計算)。 そのため、現時点ではw_judge_countが奇数の場合でも、特に計算をする必要はないと考えております。
swordone

2018/04/30 03:57

そうではなく、w_judge_countが奇数の場合、そもそもw_changed_input_numberという変数が登場しないまま★のコードにたどり着くんですよ。その場合コンピュータはその行で何をしたらいいんでしょうね?
退会済みユーザー

退会済みユーザー

2018/04/30 04:02

適当にかいたらうごかなかったスコープが問題らしいけど直したくないっていってるような質問者に修正されたコードはつかないと思いますよ。 原因がどこかレベルで止める回答(この解答)もその一つ
nagomi72

2018/04/30 04:25

w_judge_countの宣言位置を変えることで解決しました。 ご回答いただきましてありがとうございました。
swordone

2018/04/30 04:27

原因がわかってるならもうちょっと考えろよって思いが半分、 なぜエラーが出るのかコンパイラの気持ちになってみろよっていうのが半分
guest

0

w_judge_countをif文の中で宣言していたのを外側に配置することで22,36,39の問題解決。
isJudgeOperandを呼ぶときに引数でw_countを渡すことで56解決

投稿2018/04/30 04:29

nagomi72

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問