🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

2回答

2006閲覧

このJavaのコードのどこを改善したらいいのか教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

1クリップ

投稿2019/11/14 00:38

以下のような実行結果になるように、クラスを完成させなさい。

実行結果
(1000001) 太郎 (男性) ¥256500-
(100002) 花子 (女性) ¥192400-

toString()メソッドで値をString型で返すところなどがまだよくわかっていないです。実行すると、[Lmodel.Employee;@5ccd43c2 という実行結果になってしました。

package question23;

import model.Employee;
import model.Fukuoka;
import model.Tokyo;

public class Question23 {

public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ //クラス配列を作成 Employee [] Employees=getEmployee(); System.out.println(Employees); } //getEmployeeメソッドを生成 public static Employee[] getEmployee() { Employee Employees []=new Employee[2]; Employees[0]=new Employee("太郎", true, new Tokyo());//第三引き数 AbstactSalary型 Employees[1]=new Employee("花子",false, new Fukuoka()); return Employees; }

}


package model;

public class Employee extends Personal {
//フィールド変数
private static int EMPLOYEE_ID =100000; /学籍番号の定数/
private static int count=1; /登録開始番号/
private Integer empId; /社員番号/
private AbstractSalary salary; /給料/

//コンストラクタ public Employee(String name, boolean isMan, AbstractSalary salary){ super(name,isMan); setEmpId(EMPLOYEE_ID+count); setSalary(salary); } /*public Employee(String name, boolean isMan){ setName(name); setMan(isMan); }*/ //getter studentId public Integer getEmpId() { return empId; } //seter 社員番号を設定する public void setEmpId(Integer empId) { this.empId=EMPLOYEE_ID+count; } //geter 給料 public AbstractSalary getSalary() { return salary; } //setter 給料 public void setSalary(AbstractSalary salary) { this.salary=salary; } //toStringメソッド @Override public String toString() { return "["+empId+"]"+getName()+toString()+"\"+salary"; }

}

package model;

public class Personal {
//フィールド変数
private String name; //名前
private boolean isMan; //性別

//コンストラクタ Personal(String name, boolean isMan){ setName(name); setMan(isMan); } Personal(){ } //getter name public String getName() { return name; } //setter name public void setName(String name) { this.name=name; } //isManメソッド public boolean isMan() { return isMan; } //setter public void setMan(boolean isMan) { this.isMan=isMan; } //メソッド @Override public String toString() { if(isMan){ return "(男性)"; }else { return "(女性)"; } }

}

package model;

abstract public class AbstractSalary extends Personal{
//フィールド変数
private static int BASE_SALARY=180000; //基本給
private int totalSalary=0; //総支払額
public int allowance=0; //手当

//コンストラクタ AbstractSalary(){ setAllowance(); setTotalSalary(BASE_SALARY+getAllowance()); } //getter 総支給額 public int getTotalSalary() { return totalSalary; } //sette 総支給額の計算 public void setTotalSalary(int totalSalary) { this.totalSalary=BASE_SALARY+getAllowance(); } //geter 手当を戻す public int getAllowance() { return allowance; } //抽象メソッド abstract public void setAllowance(); //文字列の表示 public String toString() { return "\"+totalSalary+"-"; //総支給額を表示する }

}

package model;

public class Tokyo extends AbstractSalary{

//メソッド public void setAllowance() {//手当て=1500*31 allowance=1500*31; }

}

package model;

public class Fukuoka extends AbstractSalary {

public void setAllowance() { //手当て=400*31 allowance=400*31; }

}

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

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

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

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

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

cateye

2019/11/14 00:48

仕様はどうなっていますか? ソースが仕様だと言うなら、ソースの説明をして下さい。
m.ts10806

2019/11/14 01:19

>"\"+totalSalary+"-" ここ。動かないと思います。
退会済みユーザー

退会済みユーザー

2019/11/14 01:57

クラス仕様書   クラス名 Question23 パッケージ question23 メソッド名 1 mainメソッド  オブジェクトを生成するため、getEmployees()を呼び出す メソッド2  getEmployees  オブジェクトを戻す クラス名 Personal パッケージ model 個人情報クラス 名前と性別を管理する クラス名 Employee パッケージ model 社員情報クラス 社員番号を管理する クラス名  AbstractSalary  パッケージ model 給料抽象クラス 基本給+手当を管理。しかし、手当はサブクラス次第で変更 クラス名 Tokyo パッケージ model 東京の地域手当を設定 クラス名 Dukuoka  パッケージmodel 福岡地域の地域手当を設定する。
退会済みユーザー

退会済みユーザー

2019/11/14 01:58

"\"+totalSalary+"-" をどのようにしたら、改善されますか?
m.ts10806

2019/11/14 02:34

構文エラーの範疇ですが動くか動かないかは自身で把握されてませんか? 「エスケープシーケンス」あたりで調べてください
guest

回答2

0

Employee型の配列をそのまま出力しようとしているので実行結果が想定と異なるものが出るのかと。
配列の中身を出力してあげたら想定していた実行結果が出ませんか?

Java

1System.out.println(Employees[0]); 2System.out.println(Employees[1]);

投稿2019/11/14 00:46

syachiku

総合スコア117

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

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

退会済みユーザー

退会済みユーザー

2019/11/14 01:48

実行した結果、modelパッケージのtoStringメソッドにエラーがあると表示されました・・。
syachiku

2019/11/14 01:52

エラーが表示された場合はそのエラーの内容を提示してください。
tetutetu

2019/11/14 02:03

>配列の中身を出力してあげたら想定していた実行結果が出ませんか? 出ません。
ironya

2019/11/14 02:15

Employee クラスの toStoringメソッドの中て、 +toString() してるのが余計なのでは? スタックオーバーフローしちゃうかと思いますよ。
退会済みユーザー

退会済みユーザー

2019/11/14 02:24

Exception in thread "main" java.lang.StackOverflowError at java.base/java.lang.StringUTF16.checkBoundsOffCount(StringUTF16.java:1482) at java.base/java.lang.StringUTF16.inflate(StringUTF16.java:1308) at java.base/java.lang.StringLatin1.inflate(StringLatin1.java:734) at java.base/java.lang.AbstractStringBuilder.inflate(AbstractStringBuilder.java:229) at java.base/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1665) at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:539) at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) at model.Employee.toString(Employee.java:54) at model.Employee.toString(Employee.java:54) at model.Employee.toString(Employee.java:54) at model.Employee.toString(Employee.java:54) at model.Employee.toString(Employee.java:54) at model.Employee.toString(Employee.java:54)
退会済みユーザー

退会済みユーザー

2019/11/14 02:25

このような、長文のエラーが表示されてしまいました・・。
ironya

2019/11/14 02:27

やっぱり、+toString() が余計です。削除しましょう。
退会済みユーザー

退会済みユーザー

2019/11/14 02:38

[100001] 太郎 true totalSalary [100002] 花子 false totalSalary このように表示されてしまうのですが、modelパッケージの中にあるPersonalクラス、Employeeクラス、AbstractSalaryクラスの中にあるtoStringメソッドを表示するにはどのようにしたらいいでしょうか?
退会済みユーザー

退会済みユーザー

2019/11/14 02:41

toString()メソッドを記述しないでだと、男性と女性が表示されなくなってしまって、trueとfalseになってしまいます・・。isMan()だとtrueとfalseが取得されてしまいます。
guest

0

ベストアンサー

public String toString() {

return "["+getEmpId()+"]"+" "+getName()+ super.toString()+getSalary();}

このようにやるとできました。ありがとうございます。

投稿2019/11/14 03:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問