キーワード辞典
物凄く乱暴なJava for全商1級+

登録日 14/09/10   更新日 16/10/28



物凄く乱暴なJavaに関する用語(オブジェクト的なこと)

詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、 以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。


リスト構造


リスト構造

Javaには、ポインタという概念は無い。
しかし、クラスは参照型であるため、ポインタと同様に扱うことが出来る。
また、自己参照(メンバとして自分自身と同じ型のクラスへの参照を持つ)も可能なため、 C言語と同様にリスト構造のプログラムを作成することが出来る。

とりあえず作ってみた、山手線内を移動するプログラム

ひとつひとつの駅のクラス

+-------------+
|     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 + "駅 ");
	}
}

幾つもの駅をリング状に処理するクラス

7~16行目:コンストラクタ。1つ目の駅を設定する。
  +-------------+     +-------------+     +-------------+      +-------------+
  |   syuten    |     | newStation  |     |    siten    |      |   current   |
  +-------------+     +-------------+     +-------------+      +-------------+
         |                   |                   |                    |
         +-------------------+-------------------+--------------------+
                            ↓
                      +-------------+
                      |     name    |
                      |------+----->|
                  +-<-| prev | next |->-+
                  |   +------+------+   |
                  |                     |プラレール的な?
                  |                     |リング状の繋がり
                  |                     |
                  +---------------------+

19~28行目:終点と始点の間に新駅を挟み込んでつなげ、終点の参照をつなげた駅にする。
イメージ(2駅目の時は、siten と syuten が、同じ1つの駅を参照する)。
(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("ご乗車有難うございました!");
	}
}







[ 黒板消しとチョーク受けの画像 ]