詳しくは公式マニュアルをお読みください。
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("ご乗車有難うございました!"); } }