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

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

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

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

Q&A

解決済

1回答

2268閲覧

javaのif文でのインクリメント.デクリメント演算子の構文の扱いについての質問です。

Kirby2318

総合スコア69

Java

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

0グッド

1クリップ

投稿2020/06/20 13:41

編集2020/06/20 14:25

以前までc#をやっていたのですが、基礎を理解するためにjavaを初めて1.2週間くらいです。(学校で習い始めたから移行した理由もあります。)
そう言うわけで教科書に記載されていた問題を解いていたときの話です。
教科書の問題文
「nyusyutuの値が0ならば入庫を表し、在庫数(zaikosu)を1増やす。nyusyutuの値が1ならば出庫を表し、在庫数(zaikosu)を1減らす。nyusyutuの値は、0か1しかないものとする。」
教科書曰くただのifをかけというもので、大雑把な説明になって自分でどうやって写すかとか決めて構文を書いてみました。

import java.util.Scanner; public class test{ public static void main(String[]args){ int z = 0; //在庫数変数の宣言 int n; //入出の変数の宣言 Scanner key = new Scanner(System.in); System.out.println("0か1の値を入力してください:"); System.out.println("0...入庫"); System.out.println("1...出庫"); int x = key.nextInt(); if(x == 0){ ++z; System.out.println("商品が一つ入庫されました"); }else{ --z; System.out.println("商品が一つ出庫されました"); } } }

これはエラーが出ずに行えた最終に至った構文です。
最初はそもそもelseのifエラーが出て、調べて行くうちにif文が2行に渡るときはブロックをつけないといけないことを知りましたが、システムアウトプリントの後にデクリメントの処理を書いていました。
そうすると、zのシンボルの場所なんたらかんたらのエラーが発生してしまいました。

そもそもこのエラーがなんなのかわかりませんが、なんとなく場所とシンボル zとあったので、ブロック内に入れたから認識できてないのかな?って勝手に思って、プリント内に入れれば解決すると思って、プリントラインの後に++z;--z;の処理をプラスしてできたと思ったのですが、それもプリントされて表示されることを忘れていました。もう治すとこないなと思いながら試しに上の構文のようにプリントアウトする前にデクリメントの処理を入れてみた結果思い通りの結果ができました。

問題が解決できたのはいいのですが、どうせデクリメントの処理は見せないのだから、なぜ?アウトプリントの処理の後に書くとエラーが出るのだろう?と思いました。
もともとそういうルールがあって上でその事実をzのシンボルの場所なんたらかんたらのエラーでパソコンが教えてくれていたのに自分のエラー認識が間違っていたのか?
そのほかの原因なのか?

どの原因であれ、そのエラーの内容とインクリメント・デクリメント演算子を利用するときに当たる注意など使用などをご存じの方がいましたら、それも教えていただきたく質問をさせていただきました。
少しわかりづらい文となっていますが、随時指摘をいただければ幸いです。

エラーをはっきり明記してくださいという指摘がございました。ありがとうございます。
しかし構文が完了しておりエラーのない状態でした。質問時の時のエラーを再現するために同じと思われるような構文を変えたのですがどうも、成功したみたいです。ちなみに成功した構文は以下のようです。

import java.util.Scanner; public class test{ public static void main(String[]args){ int z = 0; //在庫数変数の宣言 int n; //入出の変数の宣言 Scanner key = new Scanner(System.in); System.out.println("0か1の値を入力してください:"); System.out.println("0...入庫"); System.out.println("1...出庫"); int x = key.nextInt(); if(x == 0){ System.out.println("商品が一つ入庫されました"); ++z; }else{ System.out.println("商品が一つ出庫されました"); --z; } } }

先程までの質問では、インクリメント・デクリメント演算子の位置がエラー発生の原因だと思っていましたが違うみたいです。
どうしてもモヤモヤを改善したくエラーが発生していた構文を再現しよう試みたとしたのですが、できませんでした。発生していたエラーは「シンボルを見つけられませんでした。」というものです。

少し質問を変えて、多分このシンボルを見つけられませんでしたというエラーは、具体的なエラーの時の構文がないと具体的なエラーの要所部分を回答できないと思いますので、簡単でいいですのでこのエラー自体の簡単な概要をわかる範囲でお願いします。

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

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

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

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

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

y_waiwai

2020/06/20 13:45

エラーメッセージはいらぬ翻訳、省略しないで、出たそのママをコピペで提示してください なにをどうしたときにどういうエラーが出たのかを、正確にきっちり提示しましょう
swordone

2020/06/20 13:49

その質問をするのなら、「エラーが出たときのコード」と「エラーの内容」を載せてください。
Kirby2318

2020/06/20 14:03 編集

やはりそうでしたね。すみません ただいま現在そのエラーの文章を打って同じエラーを出そうとしたのですが。。。 なんとエラーなく実行されたみたいです。少し困惑してます。書かれていたエラーの構文を見つけ次第返信・質問修正させていただきます。
Kirby2318

2020/06/20 14:26

質問を修正いたしました。ご迷惑をおかけします。
guest

回答1

0

ベストアンサー

シンボルを見つけられませんでしたというエラーは

変数宣言をしていない場合とか、importしてないクラスを使うときにでます。

以下、意図的にint宣言を抜いたものです。
z や、 x を参照する際にエラーとなります。

そのさいにシンボルが明示されるので、そこがおかしいとわかります。

シンボル: 変数 z : シンボルを見つけられません
シンボル: クラス Scanner: シンボルを見つけられません
シンボル: 変数 x : シンボルを見つけられません

当時のコードはわからないので推測しかできませんが、

nyusyutu(n)の値の判定をしようとしてるのに、xで判定していてxが未定義というものだったのじゃないでしょうか。

java

1public class test { 2 public static void main(String[] args) { 3 z = 0; // int が抜けている 4 int n; 5 Scanner key = new Scanner(System.in); // Scannerのimport忘れ 6 System.out.println("0か1の値を入力してください:"); 7 System.out.println("0...入庫"); 8 System.out.println("1...出庫"); 9 10 x = key.nextInt(); // int が抜けている 11 12 if (x == 0) { 13 14 System.out.println("商品が一つ入庫されました"); 15 ++z; 16 } else { 17 System.out.println("商品が一つ出庫されました"); 18 --z; 19 20 } 21 } 22}
test.java:5: エラー: シンボルを見つけられません z = 0; //在庫数変数の宣言 ^ シンボル: 変数 z 場所: クラス test test.java:7: エラー: シンボルを見つけられません Scanner key = new Scanner(System.in); ^ シンボル: クラス Scanner 場所: クラス test test.java:7: エラー: シンボルを見つけられません Scanner key = new Scanner(System.in); ^ シンボル: クラス Scanner 場所: クラス test test.java:12: エラー: シンボルを見つけられません x = key.nextInt(); ^ シンボル: 変数 x 場所: クラス test test.java:14: エラー: シンボルを見つけられません if (x == 0) { ^ シンボル: 変数 x 場所: クラス test test.java:17: エラー: シンボルを見つけられません ++z; ^ シンボル: 変数 z 場所: クラス test test.java:20: エラー: シンボルを見つけられません --z; ^ シンボル: 変数 z 場所: クラス test エラー7個

投稿2020/06/20 15:22

momon-ga

総合スコア4826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問