詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、
以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。
+-------------+ | name | |------+----->| | prev | next | +------+------+ Station クラス
//Station.java 2016.10.28 By Ryn
public class Station {
private String name; // 駅名
protected Station prev; // 前の駅への参照
protected Station next; // 次の駅への参照
Station(String name) { // コンストラクタ
this.name = name;
}
public void dispName () {
System.out.print(name + "駅 ");
}
}
+-------------+ +-------------+ +-------------+ +-------------+
| syuten | | newStation | | siten | | current |
+-------------+ +-------------+ +-------------+ +-------------+
| | | |
+-------------------+-------------------+--------------------+
↓
+-------------+
| name |
|------+----->|
+-<-| prev | next |->-+
| +------+------+ |
| |プラレール的な?
| |リング状の繋がり
| |
+---------------------+
(1)
+-------------+ +-------------+ +-------------+
| syuten | | newStation | | siten |
+-------------+ +-------------+ +-------------+
↓ ↓ ↓
+-------------+ +-------------+ +-------------+
| name | | name | | name |
|------+----->| |------+----->| |------+----->|
<-| prev | next |-> <-| prev | next |-> <-| prev | next |->
| | |->+ | | | +<-| | |
+------+------+ | +------+------+ | +------+------+
| |
+-これまでの繋がり-----+
(2)
+-------------+ +-------------+
| syuten | | siten |
+-------------+ +-------------+
↓ ↓
+-------------+ +-------------+ +-------------+
| name | | name | | name |
|------+----->| |------+----->| |------+----->|
<-| prev | next |-> <-| prev | next |-> <-| prev | next |->
+------+------+ +------+------+ +------+------+
//StationRing.java 2016.10.28 By Ryn
public class StationRing {
Station siten, syuten, current; // リストの始点、終点、現在駅への参照
// コンストラクタ 始点、終点、現在駅を登録
StationRing(String name) {
Station newStation = new Station(name);
siten = newStation;
syuten = siten;
newStation.prev = syuten;
newStation.next = siten;
current = siten;
}
// 終点と始点の間に新駅をつなげて、新駅を終点とする
public void ins(String name) {
Station newStation = new Station(name);
syuten.next = newStation;
newStation.prev = syuten;
newStation.next = siten;
siten.prev = newStation;
syuten = newStation;
}
// 現在の駅を表示する
public void current() {
current.dispName();
System.out.println("にいます");
}
// 次の駅へ移動する
public void next() {
current.dispName();
System.out.print("の次は ");
current = current.next;
current.dispName();
System.out.println("です");
}
// 手前の駅へ移動する
public void previous() {
current.dispName();
System.out.print("の手前は ");
current = current.prev;
current.dispName();
System.out.println("です");
}
}
// YamanoteLine.java 2016.10.28 By Ryn
import java.util.Scanner;
class YamanoteLine {
public static void main(String[] args) {
StationRing yamanote_line = new StationRing("品川");
yamanote_line.ins("大崎");
yamanote_line.ins("五反田");
yamanote_line.ins("目黒");
yamanote_line.ins("恵比寿");
yamanote_line.ins("渋谷");
yamanote_line.ins("原宿");
yamanote_line.ins("代々木");
yamanote_line.ins("新宿");
yamanote_line.ins("新大久保");
yamanote_line.ins("高田馬場");
yamanote_line.ins("目白");
yamanote_line.ins("池袋");
yamanote_line.ins("大塚");
yamanote_line.ins("駒込");
yamanote_line.ins("田端"); // 戸籍上の終点
yamanote_line.ins("西日暮里");
yamanote_line.ins("日暮里");
yamanote_line.ins("鶯谷");
yamanote_line.ins("上野");
yamanote_line.ins("御徒町");
yamanote_line.ins("秋葉原");
yamanote_line.ins("神田");
yamanote_line.ins("東京");
yamanote_line.ins("有楽町");
yamanote_line.ins("新橋");
yamanote_line.ins("浜松町");
yamanote_line.ins("田町");
System.out.print("あなたは、山手線の");
yamanote_line.current();
System.out.print("時計回りで、n = 次の駅へ、 p = 手前の駅へ、e = 終了、");
System.out.println("それ以外 = 現在の駅");
Scanner sc = new Scanner(System.in);
String command;
do{
command = sc.next();
switch (command) {
case "e":
break;
case "n":
yamanote_line.next();
break;
case "p":
yamanote_line.previous();
break;
default:
yamanote_line.current();
break;
}
}while(!command.equals("e"));
sc.close();
System.out.println("ご乗車有難うございました!");
}
}