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

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

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

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

Q&A

解決済

4回答

3053閲覧

java 抽象メソッド内のswitch文が機能しない

whereishope...

総合スコア12

Java

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

0グッド

0クリップ

投稿2016/05/18 14:29

編集2016/05/18 15:34

###前提・実現したいこと
初めまして。
現在、javaで入力された数字に応じて、設定を行う抽象メソッドを使用したプログラムを作成しています。
入力された数字に応じて、
0・・・終了
1・・・着脱
2・・・現状維持
と出力されるプログラムを制作したいのですが、以下のようなエラーがコマンドプロントのswitch文の中に表記され、プログラムを実行できません。

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

シンボルを見つけられません。 型の開始が不正です。

現在のコードは下記のようになっています。
###該当のソースコード

抽象クラス
abstract class Sample {
abstract void start();

abstract void stop();

public String getStringStatus() {
String result;
switch (number) {
case 0: {
result = "終了";
break;
}
case 1: {
result = "プレイヤーのON/OFF";
break;
}
case 2: {
result = "メガネを着脱";
break;
}
case 3: {
result = "状態確認";
break;
}
default: {
result = "指定されていない数字が入力されています。";
break;
}
return result;
}
}

}

```ここに言語を入力

サブクラス
import java.util.Scanner;
class Player extends Sample{
Scanner stdIn = new Scanner(System.in);
void start () {
System.out.println("再生開始");
}

void stop () {
System.out.println("再生終了");
}

int nextgetVolum() {
int number = stdIn.nextInt();
return number;
}
}

```ここに言語を入力 サブクラス import java.util.Scanner; class Glasses extends Sample{ Scanner stdIn = new Scanner(System.in); void start() { System.out.println("装着"); } void stop() { System.out.println("外す"); } int nextgetVolum() { int number = stdIn.nextInt(); return number; } }
実行クラス class SampleMain { public static void main(String[] args) { Player pl = new Player(); Glasses gl = new Glasses(); pl.start(); pl.stop(); gl.start(); gl.stop(); System.out.println(pl.nextgetVolum()); System.out.println(gl.nextgetVolum()); System.out.println(pl.getStringStatus()); } }
このエラーはどのように解決すれば良いのでしょうか? ご教授お願いいたします。 追記: エラーコードを修正しました。

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

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

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

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

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

guest

回答4

0

当該メソッド内では変数numberが定義されていません。別のメソッドで同名の変数が定義されていますが、ローカル変数は定義されたメソッド内でしか名前が有効ではありません。同一変数の内容が欲しいならばメソッド間でのデータ受け渡しが必要です、具体的には引数や戻り値を定義した関数を使うなり大域変数(極力使いたくない)を使うなりします。

投稿2016/05/18 18:21

HogeAnimalLover

総合スコア4830

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

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

whereishope...

2016/05/19 12:26

おっしゃる通り、変数numberが定義されていませんでした。 ご指摘ありがとうございます!!
guest

0

numberという変数がこのメソッド内に見当たりません。引数として渡されるべきものでは?

そして、switchの各caseに{}はあってもいいんでしたっけ?(不安)

投稿2016/05/18 14:50

編集2016/05/18 14:52
swordone

総合スコア20651

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

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

argius

2016/05/18 14:58

{}はあっても大丈夫ですね。 変数のスコープを制限したいとき、例えば各ブロックで同じ名前の別の変数を使いたいときに使ったりします。 あまり褒められたやり方ではないかも知れませんし、このケースのように不要の場合はつけないほうが良いと思いますけどね。
guest

0

ベストアンサー

そのswitch文にnumberという変数が唐突に登場していますね。
「シンボルを見つけられません。」はそのエラーです。

もう一つのエラーはよく分かりません。

投稿2016/05/18 14:47

argius

総合スコア9388

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

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

whereishope...

2016/05/18 15:26

このnumberはPlayerクラスとGlassesクラスにあるint nextgetVolum() の値を返したものです。 System.out.println(pl.nextgetvolum())で値は確認できるのですが、そこからswitch文にて数値が判定できずに困っています。 どのようにすれば、正常に作動するのでしょうか?
argius

2016/05/18 15:37

それでしたら、実際にpl.nextgetvolum()を呼び出してnumberに代入してあげないとダメですよ。 numberはその位置に自動的に登場したりしません。 switch文の前に明示的に、 int number = nextgetvolum(); を書いてください。 ただ、Sampleからはサブクラスがnextgetvolum()メソッドを持っていることが分かりませんので、Sampleクラスに abstract int nextgetVolum(); を宣言することも必要です。
whereishope...

2016/05/19 12:24

int number = nextgetVolum();とabstract int nextgetVolum();を入力できたら無事機能しました!! 丁寧に教えていただきありがとうございました!!
guest

0

return文がswitchブロックの中に入っています。
一つ外のブロックに移動するといいでしょう。

投稿2016/05/18 14:38

yona

総合スコア18155

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

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

whereishope...

2016/05/18 15:27

switch文の外に移動させましたが、結果は変わりませんでした。 貴重な意見、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問