//自動車クラス
public class Car {
private String name; //名前
private int width; //幅
private int height; //高さ
private int length; //長さ
private double x; //現在位置X座標
private double y; //現在位置Y座標
private double fuel; //残り燃料
private Day purchaseDay; //購入日
//コンストラクタ// Car(String name,int width,int height,int length,double fuel, Day purchaseDay){ this.name=name; this.width=width; this.height=height; this.length=length; this.fuel=fuel; x=y=0.0; this.purchaseDay = new Day(purchaseDay); } public double getX(){ return x;} //現在位置X座標を取得 public double getY(){ return y;} //現在位置Y座標を取得 public double getFuel(){ return fuel;} //残り燃料を取得 public Day getPurchaseDay() { //購入日を取得 return new Day(purchaseDay); } //スペック表示// void putSpec(){ System.out.println("名前:" + name); System.out.println("車幅:" + width+"mm"); System.out.println("車高:" + height+"mm"); System.out.println("車長:" + length+"mm"); } //X方向にdx・Y方向にdy移動// boolean move(double dx,double dy){ double dist=Math.sqrt(dx*dx+dy*dy); //移動距離 if(dist>fuel) return false; //移動できない ・・・燃料不足 else{ fuel-=dist; //移動距離の分だけ燃料が減る x+=dx; y+=dy; return true; //移動完了 } }
}
//日付クラスDay
public class Day {
private int year = 1; //年
private int month = 1; //月
private int date = 1; //日
//---コンストラクタ---// public Day() { } public Day(int year) { this.year = year; } public Day(int year, int month) { this(year); this.month = month; } public Day(int year, int month, int date) { this(year, month); this.date = date; } public Day(Day d) { this(d.year, d.month, d.date); } //---年・月・日を取得---// public int getYear() { return year; } //年を取得 public int getMonth() { return month; } //月を取得 public int getDate() { return date; } //日を取得 //---年・月・日を設定---// public void setYear(int year) { this.year = year; } //年を設定 public void setMonth(int month) { this.month = month; } //月を設定 public void setDate(int date) { this.date = date; } //日を設定 public void set(int year, int month, int date) { //年月日を設定 this.year = year; //年 this.month = month; //月 this.date = date; //日 } //---曜日を求める---// public int dayOfWeek() { int y = year; //0…日曜日 int m = month; //1…月曜日 if (m == 1 || m == 2) { // … y--; //5…金曜日 m += 12; //6…土曜日 } return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + date) % 7; } //---日付dと等しいか---// public boolean equalTo(Day d) { return year == d.year && month == d.month && date == d.date; } //---文字列表現を返却---// public String toString() { String[] wd = {"日", "月", "火", "水", "木", "金", "土"}; return String.format("%04d年%02d月%02d日(%s)", year, month, date, wd[dayOfWeek()]); }
}
このときの利用例は
//自動車クラスの利用例
import java.util.Scanner;
public class CarTester3 {
public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("車のデータを入力せよ。"); System.out.print("名前は:"); String name = stdIn.next(); System.out.print("車幅は:"); int width = stdIn.nextInt(); System.out.print("高さは:"); int height = stdIn.nextInt(); System.out.print("長さは:"); int length = stdIn.nextInt(); System.out.print("ガソリン量は:"); double fuel = stdIn.nextDouble(); System.out.print("購入年:"); int y = stdIn.nextInt(); System.out.print("購入月:"); int m = stdIn.nextInt(); System.out.print("購入日:"); int d = stdIn.nextInt(); Car car2 = new Car(name, width, height, length, fuel, new Day(y, m, d)); car2.putSpec(); System.out.println("購入日:" + car2.getPurchaseDay()); }
}
この実行結果は
車のデータを入力せよ。
名前は:デロリアン
車幅は:1988
高さは:1140
長さは:4267
ガソリン量は:40
購入年:1985
購入月:10
購入日:26
名前:�f�����A��
車幅:1988mm
車高:1140mm
車長:4267mm
購入日:1985年10月26日(土)
文字化けしてしまう理由をご教示お願いします。
ちなみにコマンドプロンプトで実行したのではなく、NetBeans IDE 8.2 のなかで右クリックして実行しました。