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

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

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

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

Q&A

解決済

3回答

2795閲覧

エラーが出て動かない。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2019/07/21 09:20

編集2019/07/21 10:30

**public class Item {**にエラーが出てしまいうまく動きません。
どうすればエラーが出ずに動くようになりますか?

Itemクラス
商品名: itemName String型
単価 : cost int型
数量 : quantity int型
itemListメソッド

(商品名,単価,数量,価格)
MP3,12000円,2,24000円
(商品名,単価,数量,価格)
USB,1980円,3,5940円

import java.util.Scanner; public class CQuest01 { public static void main(String args[]) { public class Item { String itemName; int cost; int quantity; public void itemList(){ System.out.println("(商品名,単価,数量,価格)"); System.out.println(itemName+","+cost+"円,"+quantity+","+(cost*quantity)+"円"); } } System.out.println("商品の数を入力してください"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Item im[] = new Item[n]; for(int i=0;i<n;i++){ im[i] = new Item(); System.out.println("商品"+(i+1)); System.out.println("商品名"); im[i].itemName=sc.next(); System.out.println("単価"); im[i].cost=sc.nextInt(); System.out.println("数量"); im[i].quantity=sc.nextInt(); } for(int i=0;i<n;i++){ im[i].itemList(); } } }

エラー内容は以下の通りです。

Exception in thread "main" java.lang.Error: Unresolved compilation problem: ローカル・クラス Item の修飾子が正しくありません。abstract または final だけが許可されています at CQuest01.main(CQuest01.java:5)

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

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

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

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

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

y_waiwai

2019/07/21 09:21

エラーが出るなら、エラーメッセージをコピペでそのまま提示しましょう
guest

回答3

0

ベストアンサー

修正がいまいちですが、これで一応通ります。
インデントはちゃんと付けましょうd^^

java

1import java.util.Scanner; 2 3public class Main { 4 /** 5 */ 6 public static class Item { 7 8 String itemName; 9 int cost; 10 int quantity; 11 12 public void itemList() { 13 System.out.println("(商品名,単価,数量,価格)"); 14 System.out.println(itemName + "," + cost + "円," + quantity + "," + (cost * quantity) + "円"); 15 } 16 } 17 18 public static void main(String args[]) { 19 20 System.out.println("商品の数を入力してください"); 21 Scanner sc = new Scanner(System.in); 22 int n = sc.nextInt(); 23 Item im[] = new Item[n]; 24 for (int i = 0; i < n; i++) { 25 im[i] = new Item(); 26 System.out.println("商品" + (i + 1)); 27 System.out.println("商品名"); 28 im[i].itemName = sc.next(); 29 System.out.println("単価"); 30 im[i].cost = sc.nextInt(); 31 System.out.println("数量"); 32 im[i].quantity = sc.nextInt(); 33 } 34 for (int i = 0; i < n; i++) { 35 im[i].itemList(); 36 } 37 } 38 39}

text

1商品の数を入力してください 22 3商品1 4商品名 5aaa 6単価 7123 8数量 95 10商品2 11商品名 12bbb 13単価 14234 15数量 163 17(商品名,単価,数量,価格) 18aaa,123円,5,615円 19(商品名,単価,数量,価格) 20bbb,234円,3,702円 21 22Process finished with exit code 0 23

Javaのstaticメソッドを丁寧に解説! 活用例や考え方も一緒に学ぼう!

投稿2019/07/21 10:13

編集2019/07/21 10:35
cateye

総合スコア6851

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

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

退会済みユーザー

退会済みユーザー

2019/07/21 10:31

すいません... public class Main {  のところでエラーが出てしまいます...
cateye

2019/07/21 10:38 編集

クラス名をCQuest01に変えましょう。・・・クラス名=ファイル名なことはわかりますよね? 既存のソースにソース貼り付けただけなんで、クラス名変わっています。
退会済みユーザー

退会済みユーザー

2019/07/21 10:38

横からすみませんが、何というエラーでしょう?
退会済みユーザー

退会済みユーザー

2019/07/21 10:39

すみません・・・かぶってしまいました。
cateye

2019/07/21 10:43 編集

Error:(13, 8) java: クラス Mainはpublicであり、ファイルMain.javaで宣言する必要があります ・・・とかでますね
退会済みユーザー

退会済みユーザー

2019/07/21 10:43

すみません、質問者さんに向けてのつもりでした。 エラーがでたといいつつ書かれてなかったので。
cateye

2019/07/21 10:47

(`Д´)ゞラジャー!!
退会済みユーザー

退会済みユーザー

2019/07/21 11:48

エラー内容を書いていなくてすいません...
guest

0

単純に動くようにするのであれば、おそらくItemクラスについているpublicを消せば動くと思います。

現状、Itemクラスがmainメソッド内で宣言されているローカルクラスという扱いになっています。ローカルクラスはローカル変数と同様に、宣言したメソッド内でのみ有効で、そのメソッドの外側からはアクセスできません。外からアクセスできないものに対してpublicもへったくれもないので、そんな変な修飾子がついたローカルクラスはコンパイルエラーとなります。

ただ、通常ローカルクラスが有用だという場面は非常に少ないと考えられるので、通常であればcateyeさんのようにメソッドの外にstaticクラスとして宣言するか、別のクラスファイルとして作成するべきでしょうね。

投稿2019/07/21 13:03

swordone

総合スコア20651

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

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

0

そのエラーメッセージにでているとおりです。
main関数の中でクラスを定義するなら、示された修飾子を付加する必要があります

投稿2019/07/21 09:38

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2019/07/21 09:54

すいません... このエラーは初めて出たので調べてもいまいちわかりません... 示された修飾子を付加するとはどこにどう付加すればよいのでしょうか...
y_waiwai

2019/07/21 09:57

そのクラスをmain関数の中で定義する必要はあるんでしょうか? なんかわざわざややこしい方へ持っていこうとしている感じがしますが。
swordone

2019/07/21 13:05

"付加できる修飾子"がabstractとfinalの2種だけだということなので、それを付加しなければならないというのは誤りです。 ローカルクラスにpublic修飾子がついていることがそもそもの原因です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問