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

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

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

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

Q&A

解決済

4回答

1231閲覧

【Java】エラーがわからない

o46tk

総合スコア4

Java

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

0グッド

1クリップ

投稿2024/07/11 09:26

実現したいこと

エラーを解消して、コンパイルを成功させ、それぞれの出力を実現させる。

発生している問題・分からないこと

①エラー:式の開始が不正です
②エラー: ';'がありません
③エラー: 'else'への'if'がありません

エラーメッセージ

error

1Task1_6.java:38: エラー: ';'がありません 2 if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { 3 4 ^ 5Task1_6.java:40: エラー: 'else'への'if'がありません 6 } else if(name.equals(CONST_ALICE) ){ 7 ^ 8Task1_6.java:46: エラー: 式の開始が不正です 9 if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { 10 ^ 11Task1_6.java:46: エラー: ';'がありません 12 if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { 13 14 ^ 15Task1_6.java:48: エラー: 'else'への'if'がありません 16 } else if (pass.equals(CONST_PASS) ) { 17 ^ 18エラー6個

該当のソースコード

Java

1/** 2 * Task1-6: 課題内容 3 * 4 * 本課題では、すべての定数(合計6種類)を使いつつ、if文の使い方に慣れていきましょう! 5 * 問① 〜 問⑤まで回答お願いします! 6 * 7 */ 8public class Task1_6 { 9 10 // 定数(条件) 11 // ① 名前とパスワードの定数を定義してください。 12 // 補足: 13 // 定数は②〜⑤で使い回すために定義しておきます。 14 // final修飾子を付与すると、変数(動的に変わる値)ではなく、定数(変更不可な定まった値)となります。 15 // 「ここへ記述」部分へ適当な値を記述しましょう。 16 // ※詳しくはJava2-10のwikiにて紹介します。 17 private static final String CONST_ALICE = "name"; 18 private static final String CONST_PASS = "pass"; 19 // 定数(メッセージ) 20 private static final String CONST_MSG_SUCCESS = "ログイン成功です。"; 21 private static final String CONST_MSG_ERROR_NAME = "名前に誤りがあります。"; 22 private static final String CONST_MSG_ERROR_PASS = "パスワードに誤りがあります。"; 23 private static final String CONST_MSG_ERROR_INPUT = "入力情報に誤りがあります。"; 24 25 public static void main(String[] args) { 26 27 // 以下の変数「name(名前)」「pass(パスワード)」を使用して、②〜⑤の条件を満たす処理を記述してください。 28 // 名前とパスワードは画面からの入力値だと想定してみましょう。 29 String name = "alice"; 30 String pass = "pass"; 31 32 // ② 名前が「 alice 」、パスワードが「 pass 」であった場合、「 ログイン成功です 」と出力してください。 33 if (name.equals(CONST_ALICE) && pass.equals(CONST_PASS)) { 34 System.out.println(CONST_MSG_SUCCESS); 35 } 36 37 // ③ 名前のみ正しい場合、「 パスワードに誤りがあります。 」と出力してください。 38 if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { 39 System.out.println(CONST_MSG_SUCCESS); 40 } else if(name.equals(CONST_ALICE) ){ 41 System.out.println(CONST_MSG_ERROR_PASS); 42 } 43 44 45 // ④ パスワードのみ正しい場合、「 名前に誤りがあります。 」と出力してください。 46 if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { 47 System.out.println(CONST_MSG_SUCCESS); 48 } else if (pass.equals(CONST_PASS) ) { 49 System.out.println(CONST_MSG_ERROR_NAME); 50 } 51 52 53 // ⑤ 名前もパスワードも間違っていた場合は、「 入力情報に誤りがあります。 」と出力してください。 54 if (!(name.equals(CONST_ALICE)) && !(pass.equals(CONST_PASS))){ 55 System.out.println(CONST_MSG_ERROR_INPUT); 56 } 57 } 58} 59

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エラー: 式の開始が不正です
→メソッドが正しく閉じられてない場合発生するようですが、正しく閉じれていると思います。

エラー: ';'がありません
→出力のメソッドには終了場所に付けると思うのですが、if文のメソッドにも付けるのでしょうか?

エラー: 'else'への'if'がありません
→elseのすぐ右にifがちゃんとあるように思いますが、エラーへの認識は違うでしょうか?

補足

特になし

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

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

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

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

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

guest

回答4

0

ベストアンサー

コンパイラからのメッセージは時に意味が分からない場合があります。
それはコンパイラには『プログラマが本当はどう書きたかったのか』が分からないからです。

そして、コンパイラはコードの最初から順に解析して理解不能な箇所があったらそれをエラーとして報告し、そのまま解析を続けます。
従って、もし最初の理解不能な箇所で以降に関わる問題があった場合、次々に理解不能→エラーとして報告されることになります。(主に各種カッコ(),{},[]の開き・閉じやブロックコメント/* */の開き閉じ、文字列を囲む " なんかが間違いで影響が出易いです。)
ですから、エラーは最初から順に解決していかないと(単に影響を受けてエラーと言われただけかもしれない所を確認する時間を掛けてしまう等)無駄な事になりかねません。

Task1_6.java:38: エラー: ';'がありません if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) { ^

は、 if 文の問題です。
if 文は if の後の開きカッコからそれに対応する閉じカッコまでを条件式とし、その後は条件式が true の時に実行する文です。
さて、 38 行目は何処までが条件式でしょうか。
どう書いたかでは無く、書いてある事から読み取ってください。

投稿2024/07/11 10:57

編集2024/07/11 11:52
jimbe

総合スコア13045

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

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

o46tk

2024/07/11 12:23

ご回答、ありがとうございます! 「コンパイラのエラー判定処理の流れ」を丁寧にご説明くださったので、エラーも順々に解消していかないと非効率なことを学びました。 38行目に関しても、シャープなヒントを頂き、自分で発見できるように導いてくださったので、ベストアンサーにさせていただきました! ありがとうございます。 他のエラーに関しても、自力でなんとか解決しました。 また、他のご相談の際もお力お貸しいただけたら助かります!
guest

0

他の方と重なりますが、
初心者の文法エラーは、
・タイプミス
・文法の理解不足・理解間違い
のどちらかでほぼ全てだと思います。

また、1つの原因で複数のエラーメッセージが出たり、エラーメッセージがピンとこないとかはよくあるので、
先頭のエラーについて上記の間違いがないかを確認するのを繰り返せばおそらく自力で解決できます。
1つ目の原因を解消すれば、エラーメッセージは全部消えるかも知れません。エラーメッセージが残った場合は、別の原因のエラーか、1つ目の原因の修正が間違っていたかの、また2つの可能性がありますね。

今回はifの行に何らかの間違いがあるこことはほぼ確実なので、
・タイプミスが無いか?
・自分のif文の構文についての理解が間違ってないか?
を確認すればいいわけですが、入門書のif文の所の説明をしっかり読むと、すぐに自分の理解が間違っていたことが分かったと思います。
(あるいは、ifの理解は間違ってなくて、変なところに2つの括弧をミスタイプしたという可能性もありますけど、それならさすがにすぐ気づくはず)

エラーメッセージが分かりにくかったり、適切でないケースもあるので、「エラーメッセージで検索してそこに書いてあることに従う」だけでは解決できないことも多いでしょう。その場合は、上に書いたように「その行の間違いは何処なのか?」という姿勢でゼロから考えるのが良いと思います。エラーメッセージが出ている以上、そこに間違いは必ずあるので。(ファイルの取り違えで、見ているファイルとコンパイルしたファイルが異なるという間違いもありますが)
初心者はとんでもない構文を書いてしまうこともあるわけで、それに対して、常に当を得たメッセージをだせというのは無理難題です。例えば、( ){ }を全部間違って入れ替えたようなコードで、「丸括弧と波括弧を取り違えてます」というメッセージを出すためには高度なAIが必要そうに思います。

投稿2024/07/11 12:12

otn

総合スコア85458

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

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

o46tk

2024/07/11 12:17

回答ありがとうございます! ベストアンサーは別の方を選ばせていただきましたが、otn様の回答も非常に参考になりました。
guest

0

このコード、入力する環境はなんだったのでしょうか。
たとえばVisualStudio Codeなどのエディタ(+Java拡張)やIntelliJなどで書けば、静的なコード解析によるエラーとして普通に &&の部分にエラーが提示されるなどの補助がつきます。

ブラウザのエディタ(入力フォーム上に書き込む)での機能は、作り込みされていない場合はメモ帳レベルなので全てを目視でチェックとなり、非常に辛いと思います。

ブラウザベースで手軽に学べるとかよく聞きますが、入力環境がそれなりにできてないとむだなところで苦労させられると思います。

※ 回答はもう得られてるようなのでちょっとだけ別視点で

投稿2024/07/17 00:17

guhaguha

総合スコア2

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

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

o46tk

2024/07/18 04:59

別視点でのご助言ありがとうございます! SublimeText3 でコードを書いているのですが、 おそらく私のカリキュラム上ではEclipseというのが、補助が付くエディタにあたるのかなと思います。 まだ少し先まで使用が許されてないので、もう少し後でその補助のありがたみを感じようと思います。 また、他にも質問させていただいてますので、よろしければお力添えください…。
guest

0

if (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) {

if文のカッコが足りません
if (name.equals(CONST_ALICE) ) でifのカッコが終わってるため、あとの &&が来て意味不明になってます

おそらくこれが正しいんでしょうね
if ( (name.equals(CONST_ALICE) ) && (pass.equals(CONST_PASS)) ){

投稿2024/07/11 10:32

編集2024/07/11 10:34
y_waiwai

総合スコア87955

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

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

o46tk

2024/07/11 12:24

回答ありがとうございます! ベストアンサーは別の方を選ばせていただきましたが、y_waiwai様の回答も非常に参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問