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

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

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

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

Q&A

解決済

3回答

1379閲覧

「String内の”()”の中の文字列が、数式として書式化されているかどうかを真偽で判定するプログラム」をつくりたいです。

License

総合スコア2

Java

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

0グッド

0クリップ

投稿2021/12/19 22:46

編集2021/12/20 18:04

前提・実現したいこと

12.20追記
*大かっこではありません。失礼いたしました。
*いただいた質問について、下記に順次回答をしております。みなさまご対応いただき、ありがとうございます。

ご覧いただきありがとうございます。Java初心者です。
タイトルの通り、「String内のかっこ”()”の中の文字列が、数式として書式化されているかどうかを
真偽で判定するプログラム」を完成させたいです。

質問としては、以下の3点となっております。
1「あらかじめプログラム内にデータを保存しておく方法」はなにか?

2「入力されたものにそのデータ内の数字・文字が含まれているかどうかを真偽で判定させる」にはどうすればよいか?

3”(), {}, []”の3つの”かっこ”のそれぞれの順番を、正しいものの場合のみ表示するにはどうすればよいか?

作成上での私の考えとしては、「”あらかじめプログラム内にデータを保存しておき、入力されたものにそのデータ内の数字・文字が含まれているかどうかを真偽で判定させる”とよいのでは?」と考え、作成しました。

ちなみに、入力は文字列で行い、出力結果はTrue・Falseとさせるものです。
(例)
入力 → 出力結果
"(a+b)^2"  → true
"(()))("   → false
"[(])"    → true

ご回答をよろしくお願いいたします。

発生している問題・エラーメッセージ

(いずれも10行目にエラー表示となっています)

java: '.class'がありません java: 文ではありません java: ';'がありません

該当のソースコード

Java

1import java.util.Scanner; 2 3public class Exercise_02 { 4 5 public boolean matchBrackets(String str) 6 { 7 String s = " "; 8 9 for (char c: str.toCharArray()) 10 if ( s = int[], char[]) 11 { 12 13 } 14 15 return true; 16 } 17 18 static public void main(String args[]) 19 { 20 21 Scanner scanner = new Scanner(System.in); 22 String s = scanner.next(); 23 24 int[] numbers = new int[10]; 25 26 numbers[0] = 0; 27 numbers[1] = 1; 28 numbers[2] = 2; 29 numbers[3] = 3; 30 numbers[4] = 4; 31 numbers[5] = 5; 32 numbers[6] = 6; 33 numbers[7] = 7; 34 numbers[8] = 8; 35 numbers[9] = 9; 36 37 char[] characters = new char[13]; 38 39 characters[0] = '+' ; 40 characters[1] = '-' ; 41 characters[2] = '*' ; 42 characters[3] = '/' ; 43 characters[4] = '%' ; 44 characters[5] = '=' ; 45 characters[6] = '<' ; 46 characters[7] = '>' ; 47 characters[8] = '(' ; 48 characters[9] = ')' ; 49 characters[10] = '{' ; 50 characters[11] = '}' ; 51 characters[12] = '[' ; 52 characters[13] = ']' ; 53 54 System.out.println(matchBrackets(s)); 55 56 } 57}

試したこと

・1の質問について、int[] numbers = new int[10];というように、配列で保存させておき、そこから処理をさせようとしました。

・2の質問については、for文を利用し、上記のintやcharの保存を判定させようとしましたが、ここでとくにつまっています。

・3の質問については、if文とASCⅡを利用して、先に"(, {, ["のASCIIに該当した際のみに処理を実行させようとしました。

補足情報(FW/ツールのバージョンなど)

環境はIntelliJ IDEAでおこなっています。

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

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

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

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

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

maisumakun

2021/12/19 22:57

疑問点がいくつかあります。 ・「あらかじめプログラム内にデータを保存しておく方法」とありますが、何のデータを保存する必要がある、と考えているのでしょうか? ・受け付ける演算子はどのようなものでしょうか? ・「"[(])"    → true」となっていますが、文字もないしカッコのネストも一致していないのにtrueで大丈夫なのですか?
m.ts10806

2021/12/19 23:02

>: '.class'がありません そもそも実行方法間違えてるのでは どうやって実行したのでしょう
dodox86

2021/12/19 23:47

> 入力されたものにそのデータ内の数字・文字が含まれているかどうか この時点で判定の条件として足りな過ぎることに気が付きましょう。プログラミングの前の段階です。
kazuma-s

2021/12/20 00:29

「String内の大かっこの中の文字列が」 「"(a+b)^2  → true」 ( と ) は「大かっこ」なんですか?
License

2021/12/20 08:32

maisumakun様 質問ありがとうございます。 ・保存したいデータは、 int[] numbers = new int[10];と char[] characters = new char[13];の中にあるものすべてです。具体的には、数字と演算子、(),{},[], <, >と=です。 ・受け付ける演算子は、以上のものを考えています。 ・その例(「"[(])" → true」)に関してなのですが、わたしもこれをなぜ受け付けるのか皆目検討がつかない状況です。(課題の例をみると、これはtrueとなっていました)
License

2021/12/20 08:36

kazuma-s様 "(a+b)^2  → true”のことですね。 これは表記ミスで、「まるかっこ」(つまり、ふつうの”()”です)のことです。失礼いたしました。
License

2021/12/20 08:41

dodox86様 アドバイスありがとうございます。
License

2021/12/20 08:42

m.ts10806様 ご回答ありがとうございます。 まだ未完成の状態で、自分の考えを書いた上で、実行しました。 未熟であるため、まだミスが多い状況です。 ご助力いただけますと幸いです。
m.ts10806

2021/12/20 11:13

回答ではないです。質問への追記修正依頼です。 「どうやって実行した」か聞いてます。 コードはともかくそのコードをどうやって実行したかを答えてほしいのです。
License

2021/12/20 18:09 編集

m.ts10806様 実行の件について、これは実行ではなく、コンパイルの段階でした。
jimbe

2021/12/20 18:58 編集

>自分の考えを書いた上で、実行しました。 プログラミングの出来る人がそう言うのならば分かりますが、**まだ** 出来ない人がテキトウに書いてそう言うのは、意味がありません。 少なくとも、 java の文法さえ出来ていないコードは「絵に描いた餅」ですらありません。 if の条件の書き方はしっかりと確認してください。 前のご質問の回答に幾つかコードが出ましたが、それらをちゃんと理解されていますでしょうか。 「コピペして動いたので解決しました」…だけでしたら、回答の意味が半減です。 コードには考え方・アルゴリズムやデータ形式、基本的なライブラリの機能の使い方が表現されており、このご質問の処理に使えそうなものも含まれています。 ご自分の考えは結構ですが、先ずは多くのコードから「構成する部分々々が何をしているか理解する」「弄って動かして試す」等をされては如何でしょうか。 ※文字の集まりとして "char の配列"を使われていますが、"文字列"も文字の集まりだということをお忘れ無く…
m.ts10806

2021/12/20 20:58

>これは実行ではなく、コンパイルの段階でした。 でしたらどのようにコンパイルしているのでしょうか。 ようは「他人が現象を再現できる手順」を提示してもらいたいのです。
dodox86

2021/12/21 00:47 編集

IntelliJ IDEA同梱のJavaコンパイラでしょうかね。 OpenJDK 11でソースファイルモードで実行すると以下のようなエラーになるので。 C:\Java>java Excercise_02.java Excercise_02.java:10: エラー: '.class'がありません if ( s = int[], char[]) ^ Excercise_02.java:10: エラー: 文ではありません if ( s = int[], char[]) ^ Excercise_02.java:10: エラー: ';'がありません if ( s = int[], char[]) ^ いずれにせよ、コンパイルエラーにならないちゃんとしたコードを書いてからの話ですね。
License

2021/12/21 20:06

jimbe様 フィードバックありがとうございます。もう一度基礎を入れ直してきます。まだまだ経験と基礎的なところが足りないのを痛感しております。
License

2021/12/21 20:07

m.ts10806様、dodox86様 コンパイルのことに関して、そのとおりです。 基礎的な知識について見直してまいります。
guest

回答3

0

ベストアンサー

質問のコードはコンパイルエラーになるので、プログラムを実行することはできません。

License さんのやっていることは、プログラムの実行ではなく、コンパイルです。
質問するときに、エラーメッセージを勝手に省略してはいけません。
次のようなエラーメッセージが出ているのではありませんか?

text

1Exercise_02.java:10: エラー: '.class'がありません 2 if ( s = int[], char[]) 3 ^ 4Exercise_02.java:10: エラー: 文ではありません 5 if ( s = int[], char[]) 6 ^ 7Exercise_02.java:10: エラー: ';'がありません 8 if ( s = int[], char[]) 9 ^ 10エラー3個

どういうつもりで if ( s = int[], char[]) と書いていますか?

追記

「String内のかっこ”()”の中の文字列が、数式として書式化されているかどうかを

真偽で判定するプログラム」

これが意味不明です。

入力が "(a+b)^2" という String の時、かっこ "()" の中の文字列は "a+b" です。
"a+b" が数式として書式化されているかどうか、とはどういうことですか?
"^2" は括弧の中の文字列ではありませんが、これは無視していいのですか?

入力が "([)]" という String の時、かっこ "()" の中の文字列は "[" です。
"[" が数式として書式化されているかどうか、とはどういうことですか?
"]" は括弧の中の文字列ではありませんが、これは無視していいのですか?

意味が分かるように問題文全体を改変や省略なしにコピペしてもらえませんか?

追記2
問題文は、「文字列内の丸括弧が数式として正しい形式かどうかを調べる
public boolean matchBrackets(String str) というコードを書け」ですね。

"[(])" が正しいことから、丸括弧以外の文字は無視してよいことが分かります。
すなわち、「(」と「)」の対応がとれていれば良いということです。

java

1class Main { 2 public static boolean matchBrackets(String str) { 3 int count = 0; 4 for (char c : str.toCharArray()) 5 if (c == '(') 6 count++; 7 else if (c == ')' && --count < 0) 8 break; 9 return count == 0; 10 } 11 12 public static void main(String[] args) { 13 String[] examples = { 14 "(a+b)^2 = a^2+2*a*b+b^2", 15 "(()))(", 16 "(Santa()Claus is))comming(", 17 "[(])" 18 }; 19 for (String str : examples) 20 System.out.println(str + " : " + matchBrackets(str)); 21 } 22}

投稿2021/12/20 12:44

編集2021/12/21 21:41
kazuma-s

総合スコア8224

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

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

License

2021/12/20 18:01

kazuma-s様 ご返答ありがとうございます。 なるほど、コンパイルだったのですね...。失礼いたしました。 エラーメッセージは、表記されている通りで、3つあります。 ほかの2つが隠れていたため、表示しておりませんでした。失礼いたしました。 if ( s = int[], char[])については、「文字列sにint[]とchar[]内に保存されているものが含まれていれば」という意図で書いていました。
kazuma-s

2021/12/20 19:01

String s = " "; ですから、文字列 s にはスペースしか含まれていません。 int[] は型であり、その型の変数を用意すると、その中に何かを保存することはできますが、 型だけでは何も保存できません。おそらく int[]型である main の numbers を参照したいのでしょうが、 それなら int[] ではなく、numbers と書くべきですし、実際にはそう書いても matchBracketsメソッド からmain メソッド内の変数を参照することはできません。
License

2021/12/21 20:05

ご返答ありがとうございます。 追記内に関して、"^"は含みます。 また、”]”は無視しないものです。 問題文に関してなのですが、英語のものですがよろしいでしょうか。以下になります。 Write a routine public boolean matchBrackets(String str) to check whether the round brackets in the String are well-formatted as in a mathematical formula. Examples:  Input: "(a+b)^2 = a^2+2*a*b+b^2" =) true  Input: "(()))(" =) false  Input: "(Santa()Claus is))coming(" =) false  Input: "[(])" =) true
kazuma-s

2021/12/23 04:30

> 質問としては、以下の3点となっております。 > 1「あらかじめプログラム内にデータを保存しておく方法」はなにか? > 2「入力されたものにそのデータ内の数字・文字が含まれているかどうかを真偽で判定させる」にはどうすればよいか? > 3”(), {}, []”の3つの”かっこ”のそれぞれの順番を、正しいものの場合のみ表示するにはどうすればよいか? 解決済みになっていますが、上記の質問に私は答えていません。質問はどう解決されたのですか?
guest

0

String内の大かっこの中の文字列が、数式として書式化されているかどうかを真偽で判定する

をするためには、

  • カッコ内の判定、分離
  • 変数、定数、演算子の判定、分離

を行っておいて、それから改めて、

  • 数式として成立しているかどうか

という判定を行う必要があります
あなたの提示しているコードからでは、まだまだ全く足りません

投稿2021/12/19 23:14

y_waiwai

総合スコア88042

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

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

0

課題の例をみると、これはtrueとなっていました

まずは、当てはまるべき条件を確認するのが先決です。

日本語ですら書き表せないような条件を、コードに落とし込むことなど不可能です。

投稿2021/12/20 08:40

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問