前章(【18章】Javaを学ぼう)では自己紹介プログラムを完成させました!
今回は「オブジェクト指向」についてさらに基礎を定着させるため、もう一つプログラムを実装していきたいと思います!
自身のアウトプットの場となりますので、よろしく願いいたします!
まず、「自転車」と「車」という2種類のオブジェクトを用いてプログラムを組み立てます。
##Bicycleクラスの作成
・Bicycleクラスの定義
・Bicycleクラスにインスタンスフィールドnameを定義(private)
・インスタンスを生成し、コンソールにnameの値を出力
class Bicycle {
private String name;
Bicycle(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
class Main {
public static void main(String[] args) {
Bicycle bicycle = new Bicycle("ジオス");
System.out.print("【自転車の情報】");
System.out.println("名前:" + bicycle.getName());
}
}
##Bicycleクラスに色を追加
・Bicycleクラスにインスタンスフィールドcolorを追加(private)
・printDataメソッドを定義して、コンソールにnameとcolorの値を出力
class Bicycle {
private String name;
private String color;
Bicycle(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
}
}
class Main {
public static void main(String[] args) {
Bicycle bicycle = new Bicycle("ジオス", "青");
System.out.print("【自転車の情報】");
bicycle.printData();
}
}
##Bicycleクラスに走行距離を追加
・インスタンスフィールドdistanceを追加(private)
・distanceフィールドの初期値は0
・コンソールに、name, color, distanceの値を出力
class Bicycle {
private String name;
private String color;
private int distance = 0;
Bicycle(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
}
}
class Main {
public static void main(String[] args) {
Bicycle bicycle = new Bicycle("ジオス", "青");
System.out.print("【自転車の情報】");
bicycle.printData();
}
}
##「走る」機能追加
・インスタンスメソッドrunを定義
・runメソッドは、引数にint型の値(走る距離)を受け取る
・引数で受け取った値を用いて、コンソールに「◯◯km走ります」と出力
・引数で受け取った値を、distanceフィールドに加算する
class Bicycle {
private String name;
private String color;
private int distance = 0;
Bicycle(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
}
public void run(int distance) {
System.out.println(distance + "km走ります");
this.distance += distance;
System.out.println("走行距離:" + this.distance + "km");
}
}
さらにScannerを使って、走る距離を受け取れるようにします。
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Bicycle bicycle = new Bicycle("ジオス", "青");
System.out.print("【自転車の情報】");
bicycle.printData();
System.out.println("-----------------");
System.out.print("走る距離を入力してください:");
int bicycleDistance = scanner.nextInt();
bicycle.run(bicycleDistance);
}
}
##Carクラスの作成
ここまではBicycleクラスの作成をしてきました。同じようにCarクラスを作成します。
Bicycleクラスと同じフィールド、同じメソッドを持つようにします。
import java.util.Scanner;
class Car {
private String name;
private String color;
private int distance = 0;
Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
}
public void run(int distance) {
System.out.println(distance + "km走ります");
this.distance += distance;
System.out.println("走行距離:" + this.distance + "km");
}
}
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Bicycle bicycle = new Bicycle("ジオス", "青");
System.out.print("【自転車の情報】");
bicycle.printData();
System.out.println("-----------------");
System.out.print("走る距離を入力してください:");
int bicycleDistance = scanner.nextInt();
bicycle.run(bicycleDistance);
System.out.println("=================");
Car car = new Car("フェラーリ", "赤");
System.out.println("【車の情報】");
car.printData();
System.out.println("-----------------");
System.out.print("走る距離を入力してください:");
int carDistance = scanner.nextInt();
car.run(carDistance);
}
}
##Carクラスにガソリン機能追加
車にはガソリンが必要なので、「ガソリン量」という情報を持たせましょう。
・インスタンスフィールドfuelを追加(private)
・fuelフィールドの初期値は100(100Lが満タンだとします)
・コンソールに、fuelの値を出力
import java.util.Scanner;
class Car {
private String name;
private String color;
private int distance = 0;
private int fuel = 100;
Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
System.out.println("ガソリン量:" + this.fuel + "L");
}
public void run(int distance) {
System.out.println(distance + "km走ります");
this.distance += distance;
System.out.println("走行距離:" + this.distance + "km");
}
}
##Carクラスのrunメソッドの改良
Carクラスのインスタンスが走れば、fuelフィールドの値が減るようにしましょう。今回は1km走れば、ガソリンを1L消費するという条件にします。条件分岐を行い、走る距離がガソリンの残量を超えていた場合、走行できないようにします。
import java.util.Scanner;
class Car {
private String name;
private String color;
private int distance = 0;
private int fuel = 100;
Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
System.out.println("ガソリン量:" + this.fuel + "L");
}
public void run(int distance) {
System.out.println(distance + "km走ります");
if (distance <= this.fuel) {
this.distance += distance;
this.fuel -= distance;
} else {
System.out.println("ガソリンが足りません");
}
System.out.println("走行距離:" + this.distance + "km");
System.out.println("ガソリン量:" + this.fuel + "L");
}
}
##Carクラスに車に「給油」機能追加
・Carクラスにchargeメソッドを定義
・chargeメソッドは、引数にint型の値(給油する量)を受け取る
・引数の値を用いて、「◯◯L給油します」と出力
・chargeメソッドの中で、条件分岐を行う
import java.util.Scanner;
class Car {
private String name;
private String color;
private int distance = 0;
private int fuel = 100;
Car(String name, String color) {
this.name = name;
this.color = color;
}
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public void printData() {
System.out.println("名前:" + this.name);
System.out.println("色:" + this.color);
System.out.println("走行距離:" + this.distance + "km");
System.out.println("ガソリン量:" + this.fuel + "L");
}
public void run(int distance) {
System.out.println(distance + "km走ります");
if (distance <= this.fuel) {
this.distance += distance;
this.fuel -= distance;
} else {
System.out.println("ガソリンが足りません");
}
System.out.println("走行距離:" + this.distance + "km");
System.out.println("ガソリン量:" + this.fuel + "L");
}
public void charge(int litre) {
System.out.println(litre + "L給油します");
if (litre <= 0) {
System.out.println("給油できません");
} else if (litre + this.fuel >= 100) {
System.out.println("満タンまで給油します");
this.fuel = 100;
} else {
this.fuel += litre;
}
System.out.println("ガソリン量:" + this.fuel + "L");
}
}
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Bicycle bicycle = new Bicycle("ジオス", "青");
System.out.print("【自転車の情報】");
bicycle.printData();
System.out.println("-----------------");
System.out.print("走る距離を入力してください:");
int bicycleDistance = scanner.nextInt();
bicycle.run(bicycleDistance);
System.out.println("=================");
Car car = new Car("フェラーリ", "赤");
System.out.println("【車の情報】");
car.printData();
System.out.println("-----------------");
System.out.print("走る距離を入力してください:");
int carDistance = scanner.nextInt();
car.run(carDistance);
System.out.println("-----------------");
System.out.print("給油する量を入力してください:");
int litre = scanner.nextInt();
car.charge(litre);
}
}
これでひとまずプログラムが完成になります。次章では重要な「オブジェクト指向」である継承について学び、さらに今回作成したプログラムを改良していきたいと思います!
最後までご覧いただきまして、ありがとうございました!