解答例(1)
// Randomクラスを使うために必要 import java.util.*; // 入力に関するクラスを使うために必要 import java.io.*; class Kadai1021 { // throws IOException で内部で入出力エラーが起きる可能性があることを示す public static void main(String[] args) throws IOException{ // 入力をするために,System.inからBufferedReaderを作る BufferedReader d=new BufferedReader(new InputStreamReader(System.in)); // 隠した数を乱数で生成する // 1-1000までの乱数を作成 int secret=(new Random()).nextInt(999)+1; // ユーザーに入力を促す一行を表示する System.out.println("Guess a number"); //最後に表示する回数のために変数sumを準備、始めは1回から int sum=1; // for文の開始 for(;;){ // ユーザの入力を一行読み込んで整数に変換 int num=Integer.parseInt(d.readLine()); // 正解と一致したら繰り返しを終了させる // numとsecretが一致したらbreak文によってfor文から抜ける if(num==secret) break; // 入力した数値が隠した数より小さいときLOWを表示させる else if(num< secret) { System.out.println("LOW"); } // 入力した数値が隠した数より大きいときHIGHを表示させる else if(num>secret) { System.out.println("HIGH"); } // 回数を一回増やす sum = sum+1; } // for文終了 // 回数の表示 System.out.println(sum); } }
解答例(2)
import java.io.*; import java.util.*; class Kadai1021{ public static void main(String argv[]) throws IOException{ BufferedReader d=new BufferedReader(new InputStreamReader(System.in)); Random r=new Random(); //timesで入力回数を数える。 int times=0; int secret=r.nextInt(999)+1; System.out.println("これは数あてゲームです。\n1から1000までの整数を入力してください。"); //後述のリタイア機能のためにforを二重にする関係上、外側のforにラベルtoploopをつける。 toploop: for(;;){ String g=d.readLine(); //入力された文字列gをint型のguessに変換。 int guess=Integer.parseInt(g); //入力された整数が1から1000の間になかった場合(このときの入力はtimesに加算しない)。 if(guess< 1 || guess>1000){ System.out.println("だめです。1から1000までの整数を入力してください。");//要求された continue;} //入力が正しければtimesに加算。 times=times+1; //ハイ&ロウの条件分岐。 if(guess==secret){ System.out.println("★ずばり、正解です。お疲れ様でした。\nあなたは" + times + "回の入力で数あてに成功しました。"); break;} else if(guess< secret){ System.out.println("★答えはそれよりも大きい数です。");} else if(guess > secret){ System.out.println("★答えはそれよりも小さな数です。");} //気が短い人のために10回の入力ごとにリタイアするかを確認するようにした。 if(times%10==0){ System.out.println("★あーあ。入力回数が" + times + "回になっちゃいました。リタイアしますか?(yes/no)"); //yesとno以外の回答に対処するため、ここでもfor文を用いた。 for(;;){ String answer=d.readLine(); if(answer.equals("yes")){ System.out.println("終了します。・・・ふん、腰抜けめ。"); //外側のforを抜ける。 break toploop;} else if(answer.equals("no")){ System.out.println("よく言った。がんばれ。"); //内側のforを抜けて、ゲーム続行。 break;} //質問を繰り返す。 else{ System.out.println("・・・・「" + answer + "」だと!?yesかnoかはっきりしなさい!"); }}} System.out.println("↓続けて入力してください。\n"); }}}
以下のプログラムの実行結果
class q3{ public static void main(String[] args){ topLoop: for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ if(2<=j-i) continue topLoop; System.out.print("("+i+","+j+")"); if(i+j>10) break; } System.out.println(); } } }
配列に出てくるn以下の素数を表示するプログラムを改造して, n以下の素 数の数を数える以下のようなプログラムを書きなさい.
class Test11{ public static void main(String[] args){ int n=1000,i,k; int p[]=new int[n+1]; for(i=2; i<=n; i++) p[i]=1; // i++はi=i+1と同じ意味 for(i=2; i<=n; i++) if(p[i]==1){ System.out.print(i+" "); for(k=2; i*k<=n; k++) p[i*k]=0; } } }args[0]-> n
class Test11{ public static void main(String[] args){ // int n=1000,i,k; int n=Integer.parseInt(args[0]),i,k; int p[]=new int[n+1]; for(i=2; i<=n; i++) p[i]=1; // i++はi=i+1と同じ意味 for(i=2; i<=n; i++) if(p[i]==1){ System.out.print(i+" "); for(k=2; i*k<=n; k++) p[i*k]=0; } } }数を数える
class Test11{ public static void main(String[] args){ // int n=1000,i,k; int n=Integer.parseInt(args[0]),i,k; int p[]=new int[n+1]; int count=0; for(i=2; i<=n; i++) p[i]=1; // i++はi=i+1と同じ意味 for(i=2; i<=n; i++) if(p[i]==1){ // System.out.print(i+" "); count++; for(k=2; i*k<=n; k++) p[i*k]=0; } System.out.println(n+"以下の素数は"+count+"個です"); } }
Forbidden You don't have permission to access /~ktanaka/programming03/kadai1111.html on this server.とうメッセージが出てアクセ スできないはずである.17:00以降にも同様のエラーが出る時は,Shiftキーを 押しながら,再読み込み(Reload)を押してみること.
課題の締切りは11/25(火)の21時まで