解答例(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時まで