11/11 簡単なグラフィクス(1)


前回までの補足


10/21の課題について

簡単な数当てゲームを作るというもので,多くの人が正しいプログラムを 提出してくれた.

解答例(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");
}}}
        

講評


10/28の課題について

以下の数を以下の型で表現できるか?

以下のプログラムの実行結果

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+"個です");
  }
}

今日の課題

上のURLは,今日(11/11)の17:00 までは
Forbidden

You don't have permission to access /~ktanaka/programming03/kadai1111.html on this server.
とうメッセージが出てアクセ スできないはずである.17:00以降にも同様のエラーが出る時は,Shiftキーを 押しながら,再読み込み(Reload)を押してみること.

課題の締切りは11/25(火)の21時まで


次へ進む