Microsoft Word - NonGenList.doc

Size: px
Start display at page:

Download "Microsoft Word - NonGenList.doc"

Transcription

1 ジェネリクスとコンパレータを使用しないリストのプログラム例 1. ポインタによる線形リスト LinkedListNG.java: ポインタによる線形リストのクラス LinkedListNG LinkedListTesterNG.java: LinkedListNG を利用するプログラム例 2. カーソルによる線形リスト AryLinkedListNG.java: カーソルによる線形リストのクラス AryLinkedListNG AryLinkedListTesterNG.java: AryLinkedListNG を利用するプログラム例 3. 循環 重連結リスト DblLinkedListNG.java: 循環 重連結リストのクラス DblLinkedListNG DblLinkedListTesterNG.java: DblLinkedListNG を利用するプログラム例

2 === LinkedListNG.java ===================================================================== // ジェネリクスを使用しない線形リストクラスの例 // List.9-1 (pp ) をジェネリクスおよびコンパレータを使用しない形に修正 // 主な修正点 // (1) LinkedList<E> -> LinkedListNG // (2) Node の data を Data クラスに固定 // class Data を簡略化して定義 (scandata, コンパレータを削除 ) // Node<E> -> Node // E -> Data // (3) メソッド search をキー毎に分離しコンパレータ不使用に // search() -> searchno(), searchname() public class LinkedListNG { //--- データ ( 会員番号 + 氏名 ) ---// public static class Data { private Integer no; // 会員番号 private String name; // 氏名 Data(Integer no, String name) { // コンストラクタ this.no = no; this.name = name; //--- 文字列表現を返す ---// public String tostring() { return "(" + no + ") " + name; //--- ノード ---// public class Node { private Data data; // データ private Node next; // 後続ポインタ ( 後続ノードへの参照 ) //--- コンストラクタ ---// Node(Data data, Node next) { this.data = data; this.next = next; private Node head; private Node crnt; // 先頭ノード // 着目ノード //--- コンストラクタ ---// LinkedListNG() { head = crnt = null; //--- ノードを番号で探索 ---// public Data searchno(integer key) {

3 Node ptr = head; // 現在走査中のノード while (ptr!= null) { if (ptr.data.no == key) { crnt = ptr; return ptr.data; ptr = ptr.next; return null; // 探索成功 // 後続ノードに着目 // 探索失敗 //--- ノードを名前で探索 ---// public Data searchname(string key) { Node ptr = head; // 現在走査中のノード while(ptr!= null) { if(ptr.data.name.compareto(key) == 0) {// 探索成功 crnt = ptr; return ptr.data; ptr = ptr.next; // 後続ノードに着目 return null; // 探索失敗 //--- 先頭にノードを挿入 ---// public void addfirst(data obj) { Node ptr = head; // 挿入前の先頭ノード head = crnt = new Node(obj, ptr); //--- 末尾にノードを挿入 ---// public void addlast(data obj) { if (head == null) // リストが空であれば addfirst(obj); // 先頭に挿入 else { Node ptr = head; while (ptr.next!= null) ptr = ptr.next; ptr.next = crnt = new Node(obj, null); //--- 先頭ノードを削除 ---// public void removefirst() { if (head!= null) head = crnt = head.next; // リストが空でなければ //--- 末尾ノードを削除 ---// public void removelast() { if (head!= null) {

4 if (head.next == null) // ノードが一つだけであれば removefirst(); // 先頭ノードを削除 else { Node ptr = head; // 走査中のノード Node pre = head; // 走査中のノードの先行ノード while (ptr.next!= null) { pre = ptr; ptr = ptr.next; pre.next = null; // pre は削除後の末尾ノード crnt = pre; //--- ノード p を削除 ---// public void remove(node p) { if (head!= null) { if (p == head) // p が先頭ノードであれば removefirst(); // 先頭ノードを削除 else { Node ptr = head; while (ptr.next!= p) { ptr = ptr.next; if (ptr == null) return; // p はリスト上に存在しない ptr.next = p.next; crnt = ptr; //--- 着目ノードを削除 ---// public void removecurrentnode() { remove(crnt); //--- 全ノードを削除 ---// public void clear() { while (head!= null) // 空になるまで removefirst(); // 先頭ノードを削除 crnt = null; //--- 着目ノードを一つ後方に進める ---// public boolean next() { if (crnt == null crnt.next == null) return false; // 進めることはできなかった crnt = crnt.next; return true;

5 //--- 着目ノードを表示 ---// public void printcurrentnode() { if (crnt == null) System.out.println(" 着目ノードはありません "); else System.out.println(crnt.data); //--- 全ノードを表示 ---// public void dump() { Node ptr = head; while (ptr!= null) { System.out.println(ptr.data); ptr = ptr.next; ===========================================================================================

6 === LinkedListTesterNG.java ================================================================ // ジェネリクスを使用しない線形リストクラス LinkedListNG の利用例 // LinkedListTester.java (pp List9-2) からの変更点 // Data クラスの定義を LinkedListNG に移動 // Data -> LinkedListNG.Data // 挿入 を scandata() を用いないように修正 // 探索 をコンパレータ不使用の形に修正 // メニューにリストの初期化を追加 import java.util.scanner; public class LinkedListTesterNG { static Scanner stdin = new Scanner(System.in); //--- メニュー列挙型 ---// enum Menu { ADD_FIRST( " 先頭にノードを挿入 "), ADD_LAST( " 末尾にノードを挿入 "), RMV_FIRST( " 先頭ノードを削除 "), RMV_LAST( " 末尾ノードを削除 "), RMV_CRNT( " 着目ノードを削除 "), CLEAR( " 全ノードを削除 "), SEARCH_NO( " 番号で探索 "), SEARCH_NAME(" 氏名で探索 "), NEXT( " 着目ノードを進める "), PRINT_CRNT( " 着目ノードを表示 "), DUMP( " 全ノードを表示 "), // *** ここに追加項目を挿入 INIT_LIST( " 初期化 "), // *** ここまで追加項目 TERMINATE( " 終了 "); private final String message; static Menu MenuAt(int idx) { for (Menu m : Menu.values()) if (m.ordinal() == idx) return m; return null; // 初期リストを作成 // 表示用文字列 // 序数が idx である列挙を返す Menu(String string) { message = string; String getmessage() { return message; // コンストラクタ // 表示用文字列を返す //--- メニュー選択 ---// static Menu SelectMenu() { int key;

7 do { for (Menu m : Menu.values()) { System.out.printf("(%d) %s ", m.ordinal(), m.getmessage()); if ((m.ordinal() % 3) == 2 && m.ordinal()!= Menu.TERMINATE.ordinal()) System.out.println(); System.out.print(":"); key = stdin.nextint(); while (key < Menu.ADD_FIRST.ordinal() key > Menu.TERMINATE.ordinal()); return Menu.MenuAt(key); public static void main(string[] args) { Menu menu; // メニュー LinkedListNG.Data data; // 追加用データ参照 LinkedListNG.Data ptr; // 探索用データ参照 Integer no; // 番号 ( 追加 検索用 ) String name; // 名前 ( 追加 検索用 ) LinkedListNG list = new LinkedListNG(); // リストを生成 do { switch (menu = SelectMenu()) { case ADD_FIRST : // 先頭にノードを挿入 System.out.println(" 先頭に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new LinkedListNG.Data(no, name); list.addfirst(data); case ADD_LAST : // 末尾にノードを挿入 System.out.println(" 末尾に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new LinkedListNG.Data(no, name); list.addlast(data); case RMV_FIRST : list.removefirst(); case RMV_LAST : list.removelast(); case RMV_CRNT : list.removecurrentnode(); // 先頭ノードを削除 // 末尾ノードを削除 // 着目ノードを削除

8 case SEARCH_NO : // 会員番号で探索 System.out.println(" 探索するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); ptr = list.searchno(no); if (ptr == null) System.out.println(" その番号のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case SEARCH_NAME : // 氏名で探索 System.out.println(" 探索するデータを入力して下さい."); System.out.print(" 名前 :"); name = stdin.next(); ptr = list.searchname(name); if (ptr == null) System.out.println(" その名前のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case NEXT : list.next(); // 着目ノードを後方に進める case PRINT_CRNT : // 着目ノードのデータを表示 list.printcurrentnode(); case DUMP : list.dump(); case CLEAR : list.clear(); // 全ノードをリスト順に表示 // 全ノードを削除 case INIT_LIST: // リストを初期化 list.clear(); data = new LinkedListNG.Data(1, " 武田信玄 "); list.addlast(data); data = new LinkedListNG.Data(2, " 上杉謙信 "); list.addlast(data); data = new LinkedListNG.Data(3, " 織田信長 "); list.addlast(data); data = new LinkedListNG.Data(4, " 豊臣秀吉 "); list.addlast(data); data = new LinkedListNG.Data(5, " 徳川家康 "); list.addlast(data); while (menu!= Menu.TERMINATE); ===========================================================================================

9 === AryLinkedListNG.java =================================================================== // ジェネリクスを使用しない線形リストクラス ( 配列カーソル版 ) の例 // List.9-3 (pp ) をジェネリクスおよびコンパレータを使用しない形に修正 // 主な修正点 // (1) AryLinkedList<E> -> AryLinkedListNG // (2) Node の data を Data クラスに固定 // class Data を簡略化して定義 (scandata, コンパレータを削除 ) // Node<E> -> Node // E -> Data // (3) メソッド search をキー毎に分離しコンパレータ不使用に // search() -> searchno(), searchname() // (4) deleteindex(), removefirst() の BUG FIX // public class AryLinkedListNG { //--- データ ( 会員番号 + 氏名 ) ---// public static class Data { private Integer no; // 会員番号 private String name; // 氏名 Data(Integer no, String name) { // コンストラクタ this.no = no; this.name = name; //--- 文字列表現を返す ---// public String tostring() { return "(" + no + ") " + name; //--- ノード ---// class Node { private Data data; // データ private int next; // リストの後続ポインタ private int dnext; // フリーリストの後続ポインタ //--- data と next を設定 ---// void set(data data, int next) { this.data = data; this.next = next; private Node[] n; // リスト本体 private int size; // リストの容量 ( 最大データ数 ) private int max; // 利用中の末尾レコード private int head; // 先頭ノード private int crnt; // 着目ノード private int deleted; // フリーリストの先頭ノード private static final int NULL = -1; // 後続ノードはない / リストは満杯

10 //--- コンストラクタ ---// public AryLinkedListNG(int capacity) { head = crnt = max = deleted = NULL; try { n = new Node[capacity]; for (int i = 0; i < capacity; i++) n[i] = new Node(); size = capacity; catch (OutOfMemoryError e) { // 配列の生成に失敗 size = 0; //--- 次に挿入するレコードのインデックスを求める ---// private int getinsertindex() { if (deleted == NULL) { // 削除レコードは存在しない if (max < size) return ++max; // 新しいレコードを利用 else return NULL; // 容量オーバ else { int rec = deleted; // フリーリストから deleted = n[rec].dnext; // 先頭 rec を取り出す return rec; //--- レコード idx をフリーリストに登録 ---// private void deleteindex(int idx) { if (deleted == NULL) { // 削除レコードは存在しない deleted = idx; // idx をフリーリストの n[idx].dnext = NULL; // 先頭に登録 else { int rec = deleted; // idx をフリーリストの deleted = idx; // 先頭に挿入 n[idx].dnext = rec; // BUG FIX //--- ノードを番号で探索 ---// public Data searchno(integer key) { int ptr = head; // 現在走査中のノード while (ptr!= NULL) { if (n[ptr].data.no == key) { crnt = ptr; return n[ptr].data; ptr = n[ptr].next; return null; // 探索成功 // 後続ノードに着目 // 探索失敗

11 //--- ノードを名前で探索 ---// public Data searchname(string key) { int ptr = head; // 現在走査中のノード while(ptr!= NULL) { if(n[ptr].data.name.compareto(key) == 0) {// 探索成功 crnt = ptr; return n[ptr].data; ptr = n[ptr].next; // 後続ノードに着目 return null; // 探索失敗 //--- 先頭にノードを挿入 ---// public void addfirst(data obj) { int ptr = head; // 挿入前の先頭ノード int rec = getinsertindex(); if (rec!= NULL) { head = crnt = rec; // 第 rec レコードに挿入 n[head].set(obj, ptr); //--- 末尾にノードを挿入 ---// public void addlast(data obj) { if (head == NULL) addfirst(obj); else { int ptr = head; while (n[ptr].next!= NULL) ptr = n[ptr].next; int rec = getinsertindex(); if (rec!= NULL) { n[ptr].next = crnt = rec; n[rec].set(obj, NULL); //--- 先頭ノードを削除 ---// public void removefirst() { if (head!= NULL) { int ptr = n[head].next; deleteindex(head); head = crnt = ptr; // リストが空であれば // 先頭に挿入 // 第 rec レコードに挿入 // リストが空でなければ // BUG FIX //--- 末尾ノードを削除 ---// public void removelast() { if (head!= NULL) {

12 if (n[head].next == NULL) // ノードが一つだけであれば removefirst(); // 先頭ノードを削除 else { int ptr = head; // 走査中のノード int pre = head; // 走査中のノードの先行ノード while (n[ptr].next!= NULL) { pre = ptr; ptr = n[ptr].next; n[pre].next = NULL; // pre は削除後の末尾ノード deleteindex(ptr); // BUG FIX crnt = pre; //--- レコード p を削除 ---// public void remove(int p) { if (head!= NULL) { if (p == head) removefirst(); else { int ptr = head; // p が先頭ノードであれば // 先頭ノードを削除 while (n[ptr].next!= p) { ptr = n[ptr].next; if (ptr == NULL) return; // p はリスト上に存在しない n[ptr].next = n[p].next; // BUG FIX deleteindex(p); // BUG FIX // n[ptr].next = n[p].next; // BUG FIX crnt = ptr; //--- 着目ノードを削除 ---// public void removecurrentnode() { remove(crnt); //--- 全ノードを削除 ---// public void clear() { while (head!= NULL) // 空になるまで removefirst(); // 先頭ノードを削除 crnt = NULL; //--- 着目ノードを一つ後方に進める ---// public boolean next() { if (crnt == NULL n[crnt].next == NULL)

13 return false; // 進めることはできなかった crnt = n[crnt].next; return true; //--- 着目ノードを表示 ---// public void printcurrentnode() { if (crnt == NULL) System.out.println(" 着目ノードはありません "); else System.out.println(n[crnt].data); //--- 全ノードを表示 ---// public void dump() { int ptr = head; while (ptr!= NULL) { System.out.println(n[ptr].data); ptr = n[ptr].next; ===========================================================================================

14 === AryLinkedListTesterNG.java ============================================================= // ジェネリクスを使用しない線形リストクラス AryLinkedListNG の利用例 // LinkedListTesterNG.java からの変更点 // LinkedListTesterNG を AryLinkedListTesterNG に変更 // LinkedListNG を AryLinkedListNG に変更 import java.util.scanner; public class AryLinkedListTesterNG { static Scanner stdin = new Scanner(System.in); //--- メニュー列挙型 ---// enum Menu { ADD_FIRST( " 先頭にノードを挿入 "), ADD_LAST( " 末尾にノードを挿入 "), RMV_FIRST( " 先頭ノードを削除 "), RMV_LAST( " 末尾ノードを削除 "), RMV_CRNT( " 着目ノードを削除 "), CLEAR( " 全ノードを削除 "), SEARCH_NO( " 番号で探索 "), SEARCH_NAME(" 氏名で探索 "), NEXT( " 着目ノードを進める "), PRINT_CRNT( " 着目ノードを表示 "), DUMP( " 全ノードを表示 "), // *** ここに追加項目を挿入 INIT_LIST( " 初期化 "), // *** ここまで追加項目 TERMINATE( " 終了 "); private final String message; static Menu MenuAt(int idx) { for (Menu m : Menu.values()) if (m.ordinal() == idx) return m; return null; // 初期リストを作成 // 表示用文字列 // 序数が idx である列挙を返す Menu(String string) { message = string; String getmessage() { return message; // コンストラクタ // 表示用文字列を返す //--- メニュー選択 ---// static Menu SelectMenu() { int key; do { for (Menu m : Menu.values()) { System.out.printf("(%d) %s ", m.ordinal(), m.getmessage());

15 if ((m.ordinal() % 3) == 2 && m.ordinal()!= Menu.TERMINATE.ordinal()) System.out.println(); System.out.print(":"); key = stdin.nextint(); while (key < Menu.ADD_FIRST.ordinal() key > Menu.TERMINATE.ordinal()); return Menu.MenuAt(key); public static void main(string[] args) { Menu menu; // メニュー AryLinkedListNG.Data data; // 追加用データ参照 AryLinkedListNG.Data ptr; // 探索用データ参照 Integer no; // 番号 ( 追加 検索用 ) String name; // 名前 ( 追加 検索用 ) AryLinkedListNG list = new AryLinkedListNG(100); // リストを生成 do { switch (menu = SelectMenu()) { case ADD_FIRST : // 先頭にノードを挿入 System.out.println(" 先頭に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new AryLinkedListNG.Data(no, name); list.addfirst(data); case ADD_LAST : // 末尾にノードを挿入 System.out.println(" 末尾に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new AryLinkedListNG.Data(no, name); list.addlast(data); case RMV_FIRST : list.removefirst(); case RMV_LAST : list.removelast(); case RMV_CRNT : list.removecurrentnode(); // 先頭ノードを削除 // 末尾ノードを削除 // 着目ノードを削除 case SEARCH_NO : // 会員番号で探索 System.out.println(" 探索するデータを入力して下さい.");

16 System.out.print(" 番号 :"); no = stdin.nextint(); ptr = list.searchno(no); if (ptr == null) System.out.println(" その番号のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case SEARCH_NAME : // 氏名で探索 System.out.println(" 探索するデータを入力して下さい."); System.out.print(" 名前 :"); name = stdin.next(); ptr = list.searchname(name); if (ptr == null) System.out.println(" その名前のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case NEXT : list.next(); // 着目ノードを後方に進める case PRINT_CRNT : // 着目ノードのデータを表示 list.printcurrentnode(); case DUMP : list.dump(); case CLEAR : list.clear(); // 全ノードをリスト順に表示 // 全ノードを削除 case INIT_LIST: // リストを初期化 list.clear(); data = new AryLinkedListNG.Data(1, " 武田信玄 "); list.addlast(data); data = new AryLinkedListNG.Data(2, " 上杉謙信 "); list.addlast(data); data = new AryLinkedListNG.Data(3, " 織田信長 "); list.addlast(data); data = new AryLinkedListNG.Data(4, " 豊臣秀吉 "); list.addlast(data); data = new AryLinkedListNG.Data(5, " 徳川家康 "); list.addlast(data); while (menu!= Menu.TERMINATE); ===========================================================================================

17 === DblLinkedListNG.java =================================================================== // ジェネリクスを用いない循環 重連結リストクラスの例 // List.9-5 (pp ) をジェネリクスおよびコンパレータを使用しない形に修正 // 主な修正点 // (1) DblLinkedList<E> -> DblLinkedListNG // (2) Node の data を Data クラスに固定 // class Data を簡略化して定義 (scandata, コンパレータを削除 ) // Node<E> -> Node // E -> Data // (3) メソッド search をキー毎に分離しコンパレータ不使用に // search() -> searchno(), searchname() // (4) remove() のバグを FIX // import java.util.comparator; public class DblLinkedListNG { //--- データ ( 会員番号 + 氏名 ) ---// public static class Data { private Integer no; // 会員番号 private String name; // 氏名 Data(Integer no, String name) { // コンストラクタ this.no = no; this.name = name; //--- 文字列表現を返す ---// public String tostring() { return "(" + no + ") " + name; //--- ノード ---// class Node { private Data data; // データ private Node prev; // 先行ポインタ ( 先行ノードへの参照 ) private Node next; // 後続ポインタ ( 後続ノードへの参照 ) //--- コンストラクタ ---// Node() { data = null; prev = next = this; //--- コンストラクタ ---// Node(Data obj, Node prev, Node next) { data = obj; this.prev = prev; this.next = next;

18 private Node head; // 先頭ノード ( ダミーノード ) private Node crnt; // 着目ノード //--- コンストラクタ ---// public DblLinkedListNG() { head = crnt = new Node(); // ダミーノードを生成 //--- リストは空か ---// public boolean isempty() { return head.next == head; //--- ノードを番号で探索 ---// public Data searchno(integer key) { Node ptr = head.next; // 現在走査中のノード while (ptr!= head) { if (ptr.data.no == key) { crnt = ptr; return ptr.data; ptr = ptr.next; return null; // 探索成功 // 後続ノードに着目 // 探索失敗 //--- ノードを名前で探索 ---// public Data searchname(string key) { Node ptr = head.next; // 現在走査中のノード while(ptr!= head) { if(ptr.data.name.compareto(key) == 0) {// 探索成功 crnt = ptr; return ptr.data; ptr = ptr.next; // 後続ノードに着目 return null; // 探索失敗 //--- 着目ノードを表示 ---// public void printcurrentnode() { if (isempty()) System.out.println(" 着目ノードはありません "); else System.out.println(crnt.data); //--- 全ノードを表示 ---// public void dump() {

19 Node ptr = head.next; // ダミーノードの後続ノード while (ptr!= head) { System.out.println(ptr.data); ptr = ptr.next; //--- 全ノードを逆順に表示 ---// public void dumpreverse() { Node ptr = head.prev; // ダミーノードの先行ノード while (ptr!= head) { System.out.println(ptr.data); ptr = ptr.prev; //--- 着目ノードを一つ後方に進める ---// public boolean next() { if (isempty() crnt.next == head) return false; // 進めることはできなかった crnt = crnt.next; return true; //--- 着目ノードを一つ前方に進める ---// public boolean prev() { if (isempty() crnt.prev == head) return false; // 進めることはできなかった crnt = crnt.prev; return true; //--- 着目ノードの直後にノードを挿入 ---// public void add(data obj) { Node node = new Node(obj, crnt, crnt.next); crnt.next = crnt.next.prev = node; crnt = node; //--- 先頭にノードを挿入 ---// public void addfirst(data obj) { crnt = head; // ダミーノード head の直後に挿入 add(obj); //--- 末尾にノードを挿入 ---// public void addlast(data obj) { crnt = head.prev; // 末尾ノード head.prev の直後に挿入 add(obj);

20 //--- 着目ノードを削除 ---// public void removecurrentnode() { if (!isempty()) { crnt.prev.next = crnt.next; crnt.next.prev = crnt.prev; crnt = crnt.prev; //--- ノード p を削除 ---// public void remove(node p) { Node ptr = head.next; while (ptr!= head) { if (ptr == p) { // p を見つけた crnt = p; removecurrentnode(); ptr = ptr.next; // BUG FIX //--- 先頭ノードを削除 ---// public void removefirst() { crnt = head.next; // 先頭ノード head.next を削除 removecurrentnode(); //--- 末尾ノードを削除 ---// public void removelast() { crnt = head.prev; // 末尾ノード head.prev を削除 removecurrentnode(); //--- 全ノードを削除 ---// public void clear() { while (!isempty()) // 空になるまで removefirst(); // 先頭ノードを削除 ===========================================================================================

21 === DblLinkedListTesterNG.java ============================================================= // ジェネリクスを使用しない循環 重連結リストクラス DblLinkedListNG の利用例 // LinkedListTesterNG.java からの変更点 // LnkedListTesterNG を DblLinkedListTesterNG に変更 // LnkedListNG を DblLinkedListNG に変更 // メニューおよび処理に ADD, PREV を追加 import java.util.scanner; public class DblLinkedListTesterNG { static Scanner stdin = new Scanner(System.in); //--- メニュー列挙型 ---// enum Menu { ADD_FIRST( " 先頭にノードを挿入 "), ADD_LAST( " 末尾にノードを挿入 "), RMV_FIRST( " 先頭ノードを削除 "), RMV_LAST( " 末尾ノードを削除 "), ADD( " 着目ノードの直後に挿入 "), RMV_CRNT( " 着目ノードを削除 "), CLEAR( " 全ノードを削除 "), SEARCH_NO( " 番号で探索 "), SEARCH_NAME(" 氏名で探索 "), NEXT( " 着目ノードを後方へ "), PREV( " 着目ノードを前方へ "), PRINT_CRNT( " 着目ノードを表示 "), DUMP( " 全ノードを表示 "), // *** ここに追加項目を挿入 INIT_LIST( " 初期化 "), // 初期リストを作成 // *** ここまで追加項目 TERMINATE( " 終了 "); private final String message; static Menu MenuAt(int idx) { for (Menu m : Menu.values()) if (m.ordinal() == idx) return m; return null; Menu(String string) { message = string; String getmessage() { return message; // 表示用文字列 // 序数が idx である列挙を返す // コンストラクタ // 表示用文字列を返す //--- メニュー選択 ---// static Menu SelectMenu() { int key;

22 do { for (Menu m : Menu.values()) { System.out.printf("(%d) %s ", m.ordinal(), m.getmessage()); if ((m.ordinal() % 3) == 2 && m.ordinal()!= Menu.TERMINATE.ordinal()) System.out.println(); System.out.print(":"); key = stdin.nextint(); while (key < Menu.ADD_FIRST.ordinal() key > Menu.TERMINATE.ordinal()); return Menu.MenuAt(key); public static void main(string[] args) { Menu menu; // メニュー DblLinkedListNG.Data data; // 追加用データ参照 DblLinkedListNG.Data ptr; // 探索用データ参照 Integer no; // 番号 ( 追加 検索用 ) String name; // 名前 ( 追加 検索用 ) DblLinkedListNG list = new DblLinkedListNG(); // リストを生成 do { switch (menu = SelectMenu()) { case ADD_FIRST : // 先頭にノードを挿入 System.out.println(" 先頭に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new DblLinkedListNG.Data(no, name); list.addfirst(data); case ADD_LAST : // 末尾にノードを挿入 System.out.println(" 末尾に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new DblLinkedListNG.Data(no, name); list.addlast(data); case ADD : // 着目ノードの直後にノードを挿入 System.out.println(" 着目ノードの直後に挿入するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); System.out.print(" 名前 :"); name = stdin.next(); data = new DblLinkedListNG.Data(no, name); list.add(data); case RMV_FIRST : list.removefirst(); // 先頭ノードを削除

23 case RMV_LAST : list.removelast(); case RMV_CRNT : list.removecurrentnode(); // 末尾ノードを削除 // 着目ノードを削除 case SEARCH_NO : // 会員番号で探索 System.out.println(" 探索するデータを入力して下さい."); System.out.print(" 番号 :"); no = stdin.nextint(); ptr = list.searchno(no); if (ptr == null) System.out.println(" その番号のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case SEARCH_NAME : // 氏名で探索 System.out.println(" 探索するデータを入力して下さい."); System.out.print(" 名前 :"); name = stdin.next(); ptr = list.searchname(name); if (ptr == null) System.out.println(" その名前のデータはありません "); else System.out.println(" 探索成功 :" + ptr); case NEXT : list.next(); case PREV : list.prev(); // 着目ノードを後方に進める // 着目ノードを前方に進める case PRINT_CRNT : // 着目ノードのデータを表示 list.printcurrentnode(); case DUMP : list.dump(); case CLEAR : list.clear(); case INIT_LIST: list.clear(); // 全ノードをリスト順に表示 // 全ノードを削除 // リストを初期化

24 data = new DblLinkedListNG.Data(1, " 武田信玄 "); list.addlast(data); data = new DblLinkedListNG.Data(2, " 上杉謙信 "); list.addlast(data); data = new DblLinkedListNG.Data(3, " 織田信長 "); list.addlast(data); data = new DblLinkedListNG.Data(4, " 豊臣秀吉 "); list.addlast(data); data = new DblLinkedListNG.Data(5, " 徳川家康 "); list.addlast(data); while (menu!= Menu.TERMINATE); ===========================================================================================

Microsoft Word - NonGenTree.doc

Microsoft Word - NonGenTree.doc ジェネリクスとコンパレータを使用しない 2 分探索木のプログラム例 BinTreeNG.java: 2 分探索木のクラス BinTreeNG BinTreeTesterNG.java: BinTreeNG を利用するプログラム例 === BinTreeNG.java =========================================================================

More information

明解Javaによるアルゴリズムとデータ構造

明解Javaによるアルゴリズムとデータ構造 74 searching 3 key Fig.3-1 75 2を探索 53を探索 3-1 5 2 1 4 3 7 4 を探索 Fig.3-1 76 3 linear searchsequential search 2 Fig.3-2 0 ❶ ❷ ❸ 配列の要素を先頭から順に走査していく 探索すべき値と等しい要素を発見 Fig.3-2 6 4 3 2 3-2Fig.3-3 77 5 Fig.3-3 0

More information

新・明解Javaで学ぶアルゴリズムとデータ構造

新・明解Javaで学ぶアルゴリズムとデータ構造 第 3 章 探索 Arrays.binarySearch 743 3-1 探索 探索 searching key 配列 探索 Fig.3-1 b c 75 a 6 4 3 2 1 9 8 2 b 64 23 53 65 75 21 3-1 53 c 5 2 1 4 3 7 4 Fig.3-1 a 763 3-2 線形探索 線形探索 linear search sequential search 2

More information

明解Javaによるアルゴリズムとデータ構造

明解Javaによるアルゴリズムとデータ構造 21 algorithm List 1-1 a, b, c max Scanner Column 1-1 List 1-1 // import java.util.scanner; class Max3 { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); Chap01/Max3.java

More information

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println(Hello World); (Basic Theory of Information Processing) Java (eclipse ) Hello World! eclipse Java 1 3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello

More information

Javaによるアルゴリズムとデータ構造

Javaによるアルゴリズムとデータ構造 1 algorithm List 1-1 a, b, c List 1-1 // import java.util.scanner; class Max3 { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); int a, b, c; int max; // Chap01/Max3.java

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java ( 第 3 版 ) 6.7 変数の修飾子 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 Object クラスと Class クラス 6.7 変数の修飾子 (1/3) 変数宣言の直前に指定できる修飾子 全部で 7 種類ある キーワード final private protected public static transient volatile 意味定数として使える変数同じクラスのコードからしかアクセスできない変数サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数他のクラスからアクセスできる変数インスタンス変数ではない変数クラスの永続的な状態の一部ではない変数不意に値が変更されることがある変数

More information

Prog1_15th

Prog1_15th 2017 年 7 月 27 日 ( 木 ) 実施 応用プログラム (3) キー検索 コレクションには, ハッシュテーブルと呼ばれるものがある これは, キー (key) と値 (value) とを組として保持しているものである 通常の配列が添字により各要素にアクセス出来るのに比べて, ハッシュテーブルではキーを用いて各値にアクセスすることが出来る キー及びそのキーから連想される値の組を保持していることから,

More information

新・明解Javaで学ぶアルゴリズムとデータ構造

新・明解Javaで学ぶアルゴリズムとデータ構造 第 1 章 基本的 1 n 21 1-1 三値 最大値 algorithm List 1-1 a, b, c max // import java.util.scanner; class Max3 { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); List 1-1 System.out.println("");

More information

ALG ppt

ALG ppt 2012 6 21 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2012/index.html 1 l l O(1) l l l 2 (123 ) l l l l () l H(k) = k mod n (k:, n: ) l l 3 4 public class MyHashtable

More information

untitled

untitled 2011 6 20 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2011/index.html tech.ac.jp/k1sakai/lecture/alg/2011/index.html html 1 O(1) O(1) 2 (123) () H(k) = k mod n

More information

新・明解Java入門

新・明解Java入門 537,... 224,... 224,... 32, 35,... 188, 216, 312 -... 38 -... 38 --... 102 --... 103 -=... 111 -classpath... 379 '... 106, 474!... 57, 97!=... 56 "... 14, 476 %... 38 %=... 111 &... 240, 247 &&... 66,

More information

文字列操作と正規表現

文字列操作と正規表現 文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性

More information

アルゴリズムとデータ構造1

アルゴリズムとデータ構造1 1 200972 (sakai.keiichi@kochi sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi ://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2009/index.html 29 20 32 14 24 30 48 7 19 21 31 Object public class

More information

ALG2012-A.ppt

ALG2012-A.ppt 21279 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/212/index.html (, )ε m = n C2 = n ( n 1) / 2 m = n ( n 1) 1 11 11 111 11 111 111 1111 1 1 11 1 11 11 111 4-dimentional

More information

解きながら学ぶJava入門編

解きながら学ぶJava入門編 44 // class Negative { System.out.print(""); int n = stdin.nextint(); if (n < 0) System.out.println(""); -10 Ÿ 35 Ÿ 0 n if statement if ( ) if i f ( ) if n < 0 < true false true false boolean literalboolean

More information

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac Actual4Test http://www.actual4test.com Actual4test - actual test exam dumps-pass for IT exams Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN

More information

8 if switch for while do while 2

8 if switch for while do while 2 (Basic Theory of Information Processing) ( ) if for while break continue 1 8 if switch for while do while 2 8.1 if (p.52) 8.1.1 if 1 if ( ) 2; 3 1 true 2 3 false 2 3 3 8.1.2 if-else (p.54) if ( ) 1; else

More information

人工知能入門

人工知能入門 藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する

More information

untitled

untitled 21174 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/211/index.html tech.ac.jp/k1sakai/lecture/alg/211/index.html html (, )ε m = n C2 = n ( n 1) / 2 m = n ( ( n

More information

基礎計算機演習 実習課題No6

基礎計算機演習 実習課題No6 実習課題 No.6 課題は 3 題ある. 課題 6-1 時間内提出 次の実行例のように, 名簿を出力するプログラムをつくりたい. このプログラムでは, まず人数をたずね, 次にその人数分の名前を入力し, それを再びコンソールに出力する. なお, 空の名前が入力されても終了せずにその欄は空欄で出力するものとする. 注意とヒント この課題では,string 型の配列をまず宣言する. このとき, 配列の要素はちょうど名簿に入力する人数分だけを宣言すること

More information

Microsoft PowerPoint - lec06 [互換モード]

Microsoft PowerPoint - lec06 [互換モード] 内 容 Ⅶ. クラスの定義 クラス定義の基本 フィールドの定義 メソッド定義 例題 : 円クラスのフィールドとメソッドの定義 コンストラクタ 例題 :Circle2を使ったアプレット 1 2 クラス定義の基本 オブジェクト指向のプログラム プログラム実行時に登場するオブジェクトの性質や挙動を記述する オブジェクトの性質や挙動を記述したものが クラス である Java プログラムを書くとはクラスを定義すること

More information

** 平成 16 年度 FE 午後問題 Java** 示現塾プロジェクトマネージャ テクニカルエンジニア ( ネットワーク ) など各種セミナーを開催中!! 開催日 受講料 カリキュラム等 詳しくは 今すぐアクセス!! 平成 16

** 平成 16 年度 FE 午後問題 Java** 示現塾プロジェクトマネージャ テクニカルエンジニア ( ネットワーク ) など各種セミナーを開催中!! 開催日 受講料 カリキュラム等 詳しくは   今すぐアクセス!! 平成 16 平成 16 年度春期 FE 午後問題 Java 問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 このプログラムは, 数量の単位変換を行う共通機能を提供するクラス群と, それらのテストプログラムからなる テストプログラムでは, セルシウス温度 ( セ氏温度, ) 及びカ氏温度 ( F ) の変換を行うクラスを利用する (1) インタフェース Converter

More information

スライド 1

スライド 1 第 4 回データの入出力 情報科学部情報メディア学科 鈴木基之 1 前回の演習の答え class CalcMean { public static void main(string[] args){ int a = 10, b = 15; double f; f = ( a + b ) / 2; System.out.println(f); f = ( a + b ) / 2.0; System.out.println(f);

More information

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 ( Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 ( 引数 ) x が決まれば F(x) が決まる これを応用して 複雑な処理も 外面的にはひと固まりの処理として扱う

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

226

226 226 227 Main ClientThread Request Channel WorkerThread Channel startworkers takerequest requestqueue threadpool WorkerThread channel run Request tostring execute name number ClientThread channel random

More information

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測 泡立ち法とその実装 計算機アルゴリズム特論 :2017 年度只木進一 目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測 Comparable インターフェイ ス クラスインスタンスが比較可能であることを示す Int compareto() メソッドを実装 Integer Double String などには実装済み public

More information

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく

More information

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は 配列 2 前回には 配列の基本的な使い方と拡張 for 文について学んだ 本日は配列に付いての追加の説明として 配列のコピー 文字列配列 ガーベジコレクション 多次元配列について学んでいく 配列のコピー配列を用意し その全ての要素を別の配列にコピーすることを考える まず 以下に間違った例を示していく プログラム例 1 public class Prog07_01 int[] a = 1, 2, 3,,

More information

情報処理Ⅰ

情報処理Ⅰ Java フローチャート -1- フローチャート ( 流れ図 ) プログラムの処理手順 ( アルゴリズム ) を図示したもの 記号の種類は下記のとおり 端子記号 ( 開始 終了 ) 処理記号計算, 代入等 条件の判定 条件 No ループ処理 LOOP start Yes データの入力 出力 print など 定義済み処理処理名 end サンプルグログラム ( 大文字 小文字変換 ) 大文字を入力して下さい

More information

ALG2012-C.ppt

ALG2012-C.ppt 2012717 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2012/index.html 1 1. 2. 2 .. 3 public class WeightedNode { private E value; // private Map

More information

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。 ソフトウェア基礎演習課題 文法理解度確認範囲 問題 1 データ型 ( 変数, データ型 ) 問題 2 制御構造 (switch 文 ) 問題 3 制御構造 (while 文 ) 問題 4 制御構造と配列 ( 総和 ) 問題 5 制御構造と配列 ( 総和, 平均 ) 問題 6 データ型と各種演算子 ( 文字列, 検索 ) 問題 7 クラスの定義 ( メソッドの定義, コンストラクタの定義, キャスト

More information

デジタル表現論・第4回

デジタル表現論・第4回 デジタル表現論 第 4 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 2 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 4 回 2016 年 5 月 2 日 1 / 14 本日の目標 Java プログラミングの基礎 出力の復習 メソッドの定義と使用 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 4 回 2016 年 5 月 2 日 2 / 14 出力 Systemoutprint()

More information

アルゴリズムとデータ構造1

アルゴリズムとデータ構造1 1 2007 6 26 26 (sakai.keiichi@kochi sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2007/index.html tech.ac.jp/k1sakai/lecture/alg/2007/index.html FIFO (46 ) head,

More information

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt) 独習 JAVA 第 3 版 8.4 例外とエラークラス 8.5 throws ステートメント 8.6 独自の例外 Throwable コンストラクタ catch ブロックには Throwable 型のパラメータが必ず 1 つなければならない Throwable コンストラクタ Throwable() Throwable( String message ) message には問題を通知する文字列のメッセージ

More information

K227 Java 2

K227 Java 2 1 K227 Java 2 3 4 5 6 Java 7 class Sample1 { public static void main (String args[]) { System.out.println( Java! ); } } 8 > javac Sample1.java 9 10 > java Sample1 Java 11 12 13 http://java.sun.com/j2se/1.5.0/ja/download.html

More information

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1 Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の までを処理し どれにも一致しない場合 default; から直後の までを処理する 但し 式や値 1 値 2は整数または文字である switch( 式 ) case 値 1: // コロン : です セミコロン ; と間違えないように!!

More information

Microsoft PowerPoint - Pro110111

Microsoft PowerPoint - Pro110111 本日の到達目標 : コレクション プログラミング III 及び実習 1. コレクションとは 2. コレクションの種類 3. 使用方法 第 13 回コレクション 1 2 配列 ( 第 3 回 10 月 13 日 ) 演習 2 ファイル Bubble1.java は, 交換ソート ( バブルソート ) のプログラム ( 途中 ) である. プログラムを完成させ, 正しく実行できることを確かめなさい. /edu/g/po3_09/bubble1.java

More information

Java演習(4) -- 変数と型 --

Java演習(4)   -- 変数と型 -- 50 20 20 5 (20, 20) O 50 100 150 200 250 300 350 x (reserved 50 100 y 50 20 20 5 (20, 20) (1)(Blocks1.java) import javax.swing.japplet; import java.awt.graphics; (reserved public class Blocks1 extends

More information

DVIOUT-exer

DVIOUT-exer プログラム理論と言語 : 期末試験用問題集 Part2 (2009) 演習問題 2-0 オブジェクト指向言語, とりわけ Java に関する用語の設問をもうける. 重要な語句については復習をしておくこと. 1 演習問題 2-1( レジメ記載の問題を具体化した問題 ) 下記は, 整数 (int) を要素とする線形リストのプログラムである. class IntCell { private int value

More information

問題1 以下に示すプログラムは、次の処理をするプログラムである

問題1 以下に示すプログラムは、次の処理をするプログラムである 問題 1 次に示すプログラムは 配列 a の値を乱数で設定し 配列 a の値が 333 より大きく 667 以下の値 の合計値を求めるプログラムである 1 と 2 に適切なコードを記述してプログラムを完 成させよ class TotalNumber { public static void main(string[] args) { int[] a = new int[1000]; // 1 解答条件

More information

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV tutimura@mist.i.u-tokyo.ac.jp kaneko@ipl.t.u-tokyo.ac.jp http://www.misojiro.t.u-tokyo.ac.jp/ tutimura/sem3/ 2002 12 11 p.1/33 10/16 1. 10/23 2. 10/30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20

More information

ALG ppt

ALG ppt 2012614 (sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2012/index.html 1 2 2 3 29 20 32 14 24 30 48 7 19 21 31 4 N O(log N) 29 O(N) 20 32 14 24 30 48 7 19 21 31 5

More information

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の まで処理しますどれにも一致致しない場合 default: から直後の まで処理します 式の結果 ラベル 定数 整数または文字 (byte, short, int,

More information

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378> 公益財団法人全国商業高等学校協会主催 [2 級 Java 選択者のための問題 ] 平成 26 年度 ( 第 52 回 ) ( 平成 27 年 1 月 18 日実施 ) 情報処理検定試験 2 級プログラミング部門 Java 選択者のための問題 7 問 1 概要 誕生日を入力し 12 星座名を表示させる問題である 星座日と星座名を配列に各データを格納し 各配列の関連性 格納された星座日からどのようにして星座名を探索

More information

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF pref : 2004/6/5 (11:8) pref : 2004/6/5 (11:8) pref : 2004/6/5 (11:8) 3 5 14 18 21 23 23 24 28 29 29 31 32 34 35 35 36 38 40 44 44 45 46 49 49 50 pref : 2004/6/5 (11:8) 50 51 52 54 55 56 57 58 59 60 61

More information

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value = Part2-1-3 Java (*) (*).class Java public static final 1 class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value

More information

アルゴリズムとデータ構造1

アルゴリズムとデータ構造1 1 2005 7 22 22 (sakai.keiichi@kochi sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/lecture/alg/2005/index.html tech.ac.jp/k1sakai/lecture/alg/2005/index.html f(0) = 1, f(x) =

More information

2

2 プログラミング応用演習 b 10 月 5 日演習課題 2016/10/05 PAb 演習課題 プログラム仕様書作成課題 課題クラスを読み 次に示すクラスの仕様書を完成させよ なお 仕様書は クラス 1 つに付き 1 つ作成す る 加えて 図 1 のようなクラス継承の模式図を作成せよ < クラス名 のプログラム仕様書 > 作成者 : 学籍番号 名前 (1) クラスクラス名 : クラス名 説明 : クラスが何を表現しているか

More information

Taro-リストⅠ(公開版).jtd

Taro-リストⅠ(公開版).jtd 0. 目次 1. 再帰的なデータ構造によるリストの表現 1. 1 リストの作成と表示 1. 1. 1 リストの先頭に追加する方法 1. 1. 2 リストの末尾に追加する方法 1. 1. 3 昇順を保存してリストに追加する方法 1. 2 問題 問題 1 問題 2-1 - 1. 再帰的なデータ構造によるリストの表現 リストは データの一部に次のデータの記憶場所を示す情報 ( ポインタという ) を持つ構造をいう

More information

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲 Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲を決定します 次の型が利用でき これらの型は特に基本型とよばれます 基本型 値の種類 値の範囲 boolean

More information

Prog2_9th

Prog2_9th 2013 年 11 月 21 日 ( 木 ) 実施例外処理 Java 言語では, 作成したプログラムを実行する際に, 記述した処理が想定しない事態によって実行できなくなる場合を例外と呼び, その例外への対処, 即ち例外処理が求められる これまでの教材に登場した例外の中で,IOException はコンパイラがチェックするため, 例外処理を必ず記述しなければコンパイルが出来ないものであるのに対して,ArithmeticException

More information

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1 Java (9) 1 Lesson 7 2008-05-20 Java System.out.println() 1 Java API 1 Java Java 1 GUI 2 Java 3 1.1 5 3 1.0 10.0, 1.0, 0.5 5.0, 3.0, 0.3 4.0, 1.0, 0.6 1 2 4 3, ( 2 3 2 1.2 Java (stream) 4 1 a 5 (End of

More information

Taro-リストⅢ(公開版).jtd

Taro-リストⅢ(公開版).jtd リスト Ⅲ 0. 目次 2. 基本的な操作 2. 1 リストから要素の削除 2. 2 リストの複写 2. 3 リストの連結 2. 4 問題 問題 1 問題 2-1 - 2. 基本的な操作 2. 1 リストから要素の削除 まず 一般的な処理を書き つぎに 特別な処理を書く 一般的な処理は 処理 1 : リスト中に 削除するデータを見つけ 削除する場合への対応 特別な処理は 処理 2 : 先頭のデータを削除する場合への対応

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 3 回目変数 今日の講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能です 変数は 型 ( データ型ともいいます ) と識別子をもちます 2 型 変数に記憶できる値の種類です型は 値の種類に応じて次の 8 種類があり これを基本型といいます 基本型値の種類値の範囲または例 boolean 真偽値 true または

More information

JAVA とテンプレート

JAVA とテンプレート JAVA とテンプレート 序論 : コンテナ 他のクラスのオブジェクトを保存するものをコンテナ (Container) と呼ぶ 集合 リスト 表 コンテナに求められる機能 追加 削除 参照 要素の比較 並べ替え 要素のクラスが不明では 比較できない 要素が想定しているクラスのものかの判定 テンプレート以前の対応方法 コンテナ設計時に 保存されるクラスを特定してコンテナをコードする 保存されるクラスごとに作成しなければならない

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。 解答例 問題 1 変数 a が 3 以上でかつ 7 以下の場合 true と表示し そうでない場合は false と表示するプログラムである public class Prog061004_01 { int a; boolean b; a = Integer.parseInt(buf.readLine()); b = (a >= 3) && (a

More information

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問 Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {

More information

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値 1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値 O. value を持つ とする このようなオブジェクトを保存する二分木ヒープについて考える 二分木ヒープは以下の二つの制約のある二分木である

More information

オブジェクト指向プログラミング・同演習 5月21日演習課題

オブジェクト指向プログラミング・同演習 5月21日演習課題 オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException

More information

デジタル表現論・第6回

デジタル表現論・第6回 デジタル表現論 第 6 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 16 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年 5 月 16 日 1 / 16 本日の目標 Java プログラミングの基礎配列 ( 復習 関数の値を配列に格納する ) 文字列ファイルの書き込み 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し 1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値 O. value を持つとする このようなオブジェクトを保存する二分木ヒープについて考える 二分木ヒープは以下の二つの制約のある二分木である

More information

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i 1 1 0 1 Assignment_1.java 課題 1: チェッカー / class Assignment_1 public static void main(string[] args) int i,j; チェッカー用の 次元配列 int[][] checker=new int[][]; チェッカーパターンを書き込む for(i=0;i

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 2 第 8 回表形式データ (1) 1 テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 実際的はソフトウェアでは 表形式データの ( 例えば データベースのデータ ) を利用する場面が非常に多く とても重要である そこで 表形式を扱うプログラミングを繰り返しとりあげる 2 テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ

More information

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文 Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文字 0x0000 ~ 0xffff byte 1バイト整数 - 2 8 ~ 2 8-1 short 2バイト整数

More information

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Javaセキュアコーディングセミナー2013東京第1回 演習の解説 Java セキュアコーディングセミナー東京 第 1 回オブジェクトの生成とセキュリティ 演習の解説 2012 年 9 月 9 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 演習 [1] 2 演習 [1] class Dog { public static void bark() { System.out.print("woof"); class Bulldog

More information

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一 Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一 2 基本的考え方 リスト ( あるいは配列 )SS の中の ある要素 xx(pivot) を選択 xx より小さい要素からなる部分リスト SS 1 xx より大きい要素からなる部分リスト SS 2 xx は SS 1 または SS 2 に含まれる 長さが 1 になるまで繰り返す pivot xx の選び方として 中央の要素を選択すると効率が良い

More information

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説 Japan Computer Emergency Response Team Coordination Center 電子署名者 : Japan Computer Emergency Response Team Coordination Center DN : c=jp, st=tokyo, l=chiyoda-ku, email=office@jpcert.or.jp, o=japan Computer

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 3 回目変数 今日の講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能です 変数は 型 ( データ型ともいいます ) と識別子をもちます 2 型 変数に記憶できる値の種類です型は 値の種類に応じて次の 8 種類があり これを基本型といいます 基本型値の種類値の範囲または例 boolean 真偽値 true または

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

Microsoft Word - keisankigairon.ch doc

Microsoft Word - keisankigairon.ch doc 1000000100001010 1000001000001011 0100001100010010 1010001100001100 load %r1,10 load %r2,11 add %r3,%r1,%r2 store %r3,12 k = i + j ; = > (* 1 2 3 4 5 6 7 8 9 10) 3628800 DO 3 I=1,3 DO3I=1.3 DO3I 1.3

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: ravi@cs.tut.ac.jp, Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy オブジェクト指向プログラミング演習 2010/10/27 演習課題 スレッド ( その 2) 同期処理 結果不正 デッドロック 前回のスレッドの演習では 複数のスレッドを実行し 一つのプログラムの中の違う処理を同時に実行し た ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする )

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { S = a, a,, an 0 1 1 の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しいことを数学的帰納法で示しなさい 2. 文字列を列挙する再帰的アルゴリズムを構築しなさい 3. n = 4

More information

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説 Java セキュアコーディングセミナー東京第 3 回入出力と例外時の動作 演習解説 2012 年 11 月 11 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 Hands-on Exercises コンパイルエラーに対処しよう ファイルからのデータ入力を実装しよう 2 Hands-on Exercise(1) サンプルコードの コンパイルエラーに対処しよう 3

More information

2

2 問題 次の設問に答えよ 設問. Java のソースコードをコンパイルするコマンドはどれか a) java b) javac c) javadoc d) javaw 設問. Java のバイトコード ( コンパイル結果 ) を実行するコマンドはどれか a) java b) javac c) javadoc d).jar 設問. Java のソースコードの拡張子はどれか a).c b).java c).class

More information

問題1 以下に示すプログラムは、次の処理をするプログラムである

問題1 以下に示すプログラムは、次の処理をするプログラムである 問題 1 次のプログラムの出力結果を a~d の中から選べ public class Problem1 { int i=2; int j=3; System.out.println("i"+j); a) 23,b) 5,c) i3,d) ij 問題 2 次のプログラムの出力結果を a~d の中から選べ public class Problem2 { int a=6; if((a>=2)&&(a

More information

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value = Part2-1-3 Java (*) (*).class Java public static final 1 class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value

More information

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1 解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1つ分となっています 4 問題の 中の 1 2 などには 特に指 がないかぎり 与えられた 問選択肢群が

More information

Prog1_3rd

Prog1_3rd 2019 年 10 月 10 日 ( 木 ) 実施 プログラムの制御構造 1960 年代後半にダイクストラが提唱した構造化プログラミングという考え方では, 手続き型のプログラムを記述する際には, 順次, 選択, 反復という標準的な制御構造のみを用い, 先ずプログラムの概略構造を設計し, その大まかな単位を段階的に詳細化して処理を記述していく 順次構造順次構造とは, プログラム中の文を処理していく順に記述したものである

More information

Prog1_10th

Prog1_10th 2014 年 6 月 19 日 ( 木 ) 実施 例外処理 Java 言語では, 作成したプログラムを実行する際に, 記述した処理が想定しない事態によって実行できなくなる場合を例外と呼び, その例外への対処, 即ち例外処理が求められる 例外処理を行うための try 文の一般形は次のようになる 例外を発生させる可能性のある処理 catch( 例外のクラス名 1 変数 1 ) 例外に対処する処理 1 catch(

More information

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java 問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 public class Ex0201 { System.out.print("input> "); int input = Integer.parseInt(reader.readLine());

More information

I java A

I java A I java 065762A 19.6.22 19.6.22 19.6.22 1 1 Level 1 3 1.1 Kouza....................................... 3 1.2 Kouza....................................... 4 1.3..........................................

More information

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀 できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀 内容 コレクションとは 例外処理 Java 言語とオブジェクト指向 属性と振る舞い クラスとメソッド オブジェクト指向の特徴 演習問題 勉強会の参考書 Java ( アジャイルソフトウェア開発技術シリーズ 基礎編 ) 発売日 2012 年 5 月 10 日 著作

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 4 回目クラスの機能 (2) コンストラクタ クラス変数 クラスメソッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) コンストラクタはメソッドと同様に戻り値をもつ (2) コンストラクタはオブジェクトが生成されると最初に実行される (3) コンストラクタはメソッドと同様にオーバーロードができる (4) コンストラクタは常に public メンバとしなければならない

More information

JAVA入門

JAVA入門 JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する

More information

目 次 オブジェクト指向 1 3 オブジェクト指向 2 9 二分探索 14 二次元配列 16 ソート 18 ArrayList 25 解答 27 2

目 次 オブジェクト指向 1 3 オブジェクト指向 2 9 二分探索 14 二次元配列 16 ソート 18 ArrayList 25 解答 27 2 全国商業高等学校協会主催 情報処理検定 ( プログラミング部門 ) Java 1 級 問題集 1 目 次 オブジェクト指向 1 3 オブジェクト指向 2 9 二分探索 14 二次元配列 16 ソート 18 ArrayList 25 解答 27 2 問 1. プログラムの説明を読んで プログラムの ( public class Bunkatsu1_1 { コンストラクタを用いて表示す

More information

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx シーケンスに基づく検索モデルの検索精度について 東京工芸大学工学部コンピュータ応用学科宇田川佳久 (1/3) (2/3) 要員数 情報システム開発のイメージソースコード検索機能 他人が作ったプログラムを保守する必要がある 実務面での応用 1 バグあるいは脆弱なコードを探す ( 品質の高いシステムを開発する ) 2 プログラム理解を支援する ( 第 3 者が書いたコードを保守する ) 要件定義外部設計内部設計

More information

Microsoft Word - java a.doc

Microsoft Word - java a.doc 4 入出力の基本として ディスプレイへの文字出力と キーボードからの文字入力の方法を学びます 入出力とは何か 標準出力 標準入力 43 4.1. 入出力とは プログラムと外部機器の間でデータをやりとりすることをいいます プログラムから出て行く方向が 出力 プログラムに入って来る方向が 入力 です 出力 外部機器 プログラム 入力 外部機器 外部機器はさまざまな種類があります 出力を行うには ディスプレイ

More information

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド 二分木ヒープ (BINARY HEAP) 二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド 二分木ヒープとは どういう二分木か ある頂点の要素 pのvalueは その子 cの要素のvalueより大きくない

More information

プログラミングA

プログラミングA プログラミング A 第 10 回 演習 2015 年 6 月 29 日 東邦大学金岡晃 本日の内容 中間テストの解説 演習 1 2015/6/29 プログラミング A 中間テスト解説 : 問 1 < 問 1> 下記の命令が実行された後の a の値を書きなさい ( 省略 ). int a=13; 答え : 13 2 中間テスト解説 : 問 2 < 問 2> 下記の命令が実行された後の a の値を書きなさい

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション L2: Fundamentals of AI Programming in Java Javaアプレット ArrayList HashMap AI 応用の例 探索問題 Java アプレット VS アプリケーション ava アプレットとは html に貼り付けられる java で作成した小規模のプログラムのことで サーバー側からクライアントマシンに送られ ブラウザ上に読み込まれて実行される ブラウザと

More information