1 【問題1】 次のプログラムの出力結果を a~d の中から選べ。
public class Problem1 {
public static void main(String[] args){ 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 {
public static void main(String[] args){ int a=6; if((a>=2)&&(a<=5)){ System.out.print("A"); }else if(a!=4){ System.out.print("B"); } if(a==6){ System.out.print("C"); } } } a) A,b) B,c) C,d) BC 【問題3】 次のプログラムの出力結果を a~d の中から選べ。 public class Problem3 {
public static void main(String[] args){ for(int i=1; i<3; i++){
System.out.print(i-1); }
} }
2 【問題4】 以下に示すプログラムは、配列を初期化し、合計値を求めるプログラムである。(A)と(B)に適 切なコードを記述してプログラムを完成させよ。但し有効範囲内にないデータは加算しないものとする。 class TotalNumber {
public static void main(String[] args){ int[] a = new int[1000];
// (A) 解答条件 // (1) ループカウント変数は i とする // (2) ループ終了条件には配列の length をしようする // (3) 配列 a[ ] は、Math.random()*1000 を使って適切に初期化せよ (A) // (B) 解答条件 // sum は合計値を代入し、count は、データ数をカウントするために用いる //
int sum=0, count=0;
// (1) ループカウント変数は i とする
// (2) ループ終了条件には配列の length をしようする
// (3) 配列 a[ ] は、333 より大きく、667 以下の数を有効範囲とする (B)
}
System.out.println("有効範囲のデータ数は " + count + " で、合計は " +sum + "です"); }
}
【問題5】 次のプログラムを実行した時の出力結果を実行順に示せ。 import java.util.*;
class Book {
private String title; private String author;
public Book(String tit, String auth){ title = tit; author = auth; }
public String getauthor(String title){ return author; } public String gettitle(String author){ return title; } }
class BookStore{
ArrayList<Book> bookstore = new ArrayList<Book>(); boolean flag;
public BookStore(ArrayList<Book> books){ bookstore = books;
}
public void bookseach(String str){ flag = true;
for(int i=0; i<bookstore.size(); i++){
if( bookstore.get(i).getauthor(str).equals(str) ) {
System.out.println("作者は " + bookstore.get(i).getauthor(str) ); flag = false;
break;
3 System.out.println("本のタイトルは " + bookstore.get(i).gettitle(str) ); flag = false; break; } } if(flag) System.out.println("作者または本が見つかりません"); } }
public class BookCustomer {
public static void main(String[] args){
ArrayList<Book> bookarray = new ArrayList<Book>(); Book[] bk = new Book[10];
bk[0] = new Book("Java","Gosring"); bk[1] = new Book("Neuro","Amari"); bk[2] = new Book("Fuzzy","Zadeh"); bk[3] = new Book("C_langage","Rich"); bk[4] = new Book("Linux","Linus"); bk[5] = new Book("Mathmatica","Wolfram"); bk[6] = new Book("Lapack","Dongarra"); bk[7] = new Book("Ruby","Matsumoto"); bk[8] = new Book("Toron","Sakamura"); bk[9] = new Book("Windows","Bill"); for(int i=0; i<bk.length; i++){
bookarray.add(bk[i]); }
BookStore bks = new BookStore(bookarray);
String[] seachtestwords = { "Java", "Amari" ,"Fuzzy" ,"Rich" ,"Linux", "Wolfram","Lapack","Matsumoto","Toron","Bill" , "UNIX", "Algebra", "Matlab" };
for(int i=0; i<seachtestwords.length; i++){ System.out.print(i + "---> "); bks.bookseach( seachtestwords[i] ); } } } 【問題6】下記の実行結果となるようなプログラムを作成したい。次の①~⑤に当てはまるものを下記の部 品群(1)~(7)から選びなさい。(実行によりHi!、Hello の表示位置はかわることは有り得るがその点は 考慮しなくて良い。) // クラス class ①{ //run メソッド public void run(){
System.out.println("Tread Start!"); ② System.out.println("Tread End!"); } } //メイン
public class Test{
public static void main(String args[]){ ③
4 ⑤
} }
【実行結果】 C:¥ Java >java Test Hi! Tread Start! Hello Hello Hi! Hello Hello Hi! Hello Tread End! Hi! Hi! 【部品群】 (1) // 5 回 500 ミリ秒毎に"Hello"と表示する for(int i = 0 ; i < 5 ; i++ ){ System.out.println("Hello"); try{ Thread.sleep(500); }catch(Exception e){} } (2) // スレッドを開始 t.start(); (3)
MyRunnable implements Runnable (4)
// スレッドクラスのインスタンスを作成 MyThread t = new MyThread();
(5) // 1 秒毎に"Hi!"と 5 回表示する for(int i = 0 ; i < 5 ; i++ ){ System.out.println("Hi!"); try{ Thread.sleep(1000); }catch(Exception e){} } (6)
MyThread extends Thread (7)
// スレッドクラスのインスタンスを作成 Runnable r = new MyRunnable(); Thread t = new Thread(r);
5 【問題7】 プログラムの説明とプログラムを読んで、設問に答えよ。 【プログラムの説明】 3人の人間が3つの椅子を交互に移るようなゲームを考える。ルールは以下の通りである。 z 最初に3人はそれぞれ自分のID と同じ ID の付いた椅子に座っているものとする。 z 座ってから5000ms 経ったら椅子から離れなければならない。 z 椅子を離れたら、直前に自分が座っていた椅子以外の椅子が空いているか検索する。空いている椅子が合 った場合は次にその椅子に座ると決める。 z 空いている椅子があった場合でも1000ms の間はその椅子に移動することが出来ない。1000ms 後、その 目指すべき椅子がまだ空いていたらその椅子に移動する。
本プログラムは、Isutori, Person, Chair の3つのクラスから構成されており、マルチスレッドを用いている。
従って、少なくともどれかのクラスはRunnable インターフェースを実装しなければならない。
【プログラム】 // Isutori.java
public class Isutori 【 A 】{
public static void main(String[] args) { Chair[] chair = new Chair[3]; chair[0] = new Chair(0); chair[1] = new Chair(1); chair[2] = new Chair(2);
Person[] person = new Person[3]; person[0] = new Person(0, chair); person[1] = new Person(1, chair); person[2] = new Person(2, chair);
Thread[] thread = new Thread[person.length]; for( int i = 0; i < person.length; i++ ) {
thread[i] = new Thread(person[i]); thread[i].start(); } } 【 B 】 } // Person.java
public class Person 【 C 】{ private int id;
private Chair[] chair; private int position;
public Person(int id, Chair[] chair) { this.id = id; this.chair = chair; position = chair[id].getID(); chair[position].setStatus("used"); } 【 D 】 } // Chair.java
public class Chair 【 E 】{ private int id;
6 public Chair(int id) { this.id = id; }
public synchronized void setStatus(String status) { this.status = status;
}
public int getID() { return id; }
public synchronized String getStatus() { return status; } 【 F 】 } 設問 (1) 【 A 】, 【 C 】, 【 E 】のうち少なくとも1箇所には次のプログラムが入る。入っても良い箇所総 てのアルファベットを解答欄に記入しなさい。 implements Runnable (2) 【 B 】, 【 D 】, 【 F 】のうち少なくとも1箇所には、のプログラムが入る。入っても良い箇所総 てのアルファベットを解答欄に記入しなさい。
public void run() { while( true ) { // 5000ms 間座る try { Thread.sleep(5000); } catch(Exception e) {} // 席から離れる chair[position].setStatus("released"); // 以前座っていた椅子以外に空いてる椅子があるか検索する int search = -1;
for( int i = 0; i < chair.length; i++ ) {
if( (chair[i].getStatus() == "released") && (chair[i].getID() != position) ) { search = i; break; } } // 空いてる椅子があった場合 if( search != -1 ) { // 1000ms 待つ try { Thread.sleep(1000); } catch(Exception e) {} // 待っている間に誰かに捕られてしまったかもしれないので、再度空いてるか確認し、 // 空いていればその席に移る
if( chair[search].getStatus() == "released" ) { position = chair[search].getID(); chair[position].setStatus("used"); System.out.println("Person "+id+"は"+chair[position].getID()+"番目の椅子に移動しました。"); } } } }