@fukumiyu (美幸 福島)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

トークン "{" に構文エラー Java

解決したいこと

エラーの原因を教えて頂きたいです

Java初心者です。
eclipseを使いJavaで
年齢・身長・体重を入力すると
大人/子供の健康チェックができるような仕組みをつくってみましたが、
どうしても構文エラーになってしまうので原因を教えて頂きたいです。

発生している問題・エラー

トークン "{" に構文エラーがあります。このトークンの後には { を指定する必要があります	

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

package exercise;
// Person クラスを継承した Adult クラス
class Adult extends Person {

	this.ageType = "成人";
	this.health1Type = "BMI";	
	
	super.printData(this.height, this.weight);
	System.out.println(this.health1Type + "は" + Math.round(this.bmi()) + "です");
	
	public record bmi() {
		this.height = this.height / 100;
	    return this.weight / Math.pow(this.height,2);
	}
}

上から3行目の↓にある文の"{"が原因らしいのですが…

class Adult extends Person {

下から5行目の↓の”{”もエラーが出ます。

public record bmi() {

Mainクラス

package exercise;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		
		// 入力を受け付け
		Scanner sc = new Scanner(System.in);
		System.out.print("年齢を入力:");
		int age = sc.nextInt();
		System.out.print("身長を入力:");
		double height = sc.nextDouble();
		System.out.print("体重を入力:");
		double weight = sc.nextDouble();

		if(age >= 20) {
			//Adult,Childのインスタンス
			Adult adult = new Adult();
			adult.height = height;
			adult.weight = weight;
		} else {
			Child child = new Child();
			child.height = height;
			child.weight = weight;
		}
		
		System.out.println("======= END =======");
		sc.close();
	}

}

Personクラス

package exercise;
// Adult Child のスーパークラス
class Person {
	// 
	public String ageType; 
	public String health1Type; 
	public int age;
	public double height;
	public double weight;

	public void printData(double height, double weight) {
		this.height = height;
	    this.weight = weight;
	    System.out.println(ageType + "です");
	    System.out.println("=====" + health1Type + "を計算します=====");
	    System.out.println("身長:" + this.height);
	    System.out.println("体重:" + this.weight);
	}
}
0 likes

1Answer

this.ageType = "成人";
	this.health1Type = "BMI";	
	
	super.printData(this.height, this.weight);
	System.out.println(this.health1Type + "は" + Math.round(this.bmi()) + "です");

この4行はAdultクラス内にベタ書きされています.
クラス直下にはメンバ宣言でないものは直接書けません.

おそらく上2行はコンストラクタに,下2行はprintDataのオーバーライドに書くべき内容かと思われます.

2Like

Comments

  1. 質問とは直接関係ありませんが,オブジェクト指向と抽象化の観点から考えるとメソッドprintDataが機能過多です.
    通常,インスタンスに持っているデータ(今回はheightとweight)の上書きと出力を同時に行うことはありません.

    メソッドが持つべき役割は明確(かつ限定的)にし,必要なら別のメソッドを作るべきです.
  2. @fukumiyu

    Questioner

    Verclene様コメントありがとうございます。
    そうなのですね。
    初学者の上、急ぎでポートフォリオを作りたいため、
    あまり美しくないコードかと思いましたが質問のため載せました^^;
    他の改善点まで教えて頂き、助かります。
    コメントを受け止めた上で、修正してみます。

Your answer might help someone💌