QA@IT

javaのプログラムに関する質問です。

10199 PV

無限ループの中でキーボードから入力を受け取って
受け取った文字列を出力するプログラムを作成してください。
また、『END』という文字が入力されるとプログラムを
終了するようにしてください。
(例)

AAA
1周目:AAA
BBB
2周目:BBB
CCC
3周目:CCC
END
プログラム終了

*/
// クラスBufferedReaderは文字型入力ストリームからテキストを効率的に読み込む
import java.io.BufferedReader;

// クラスIOExceptionは入出力例外の発生を通知するシグナルを発生させる
import java.io.IOException;

// クラスInputStreamReaderはバイストリームから文字ストリームへの橋渡しの役割を持つ
import java.io.InputStreamReader;

class APIAdd06{
  public static void main(String[] args) throws IOException {

  //ここからプログラムを追加してください。
   // 以下は大体のイメージを掴む為に適当に記述してあるものです。
   // 上のメインメソッドまでが本来の問題記述となります。
  String str = "END";
  int i = 0;
  while(true){
     if(i < 3){
     System.out.println(i);
      if("END".equals(str)){
      }
      break;
      }
     }    
   }
}

APIを少し勉強して、import宣言をすれば自分でパッケージを作成する必要の無い(例えばCalendarクラスのような)java自体に搭載?格納?されているデータを使えるという便利な機能である、ということは理解しました。

そこでこの問題を解いていくのですが、最初に宣言してあるimport文のAPIが、このプログラムにおいてどのように作用するのか?というのがいまいち理解出来ません。しかも「無限ループ」と言えば、for文やwhile文を勉強していた時に処理のミスでコンパイルからの実行が延々と続く、といったイメージしかないので、「無限ループ中にキーボードからの入力???」という感じで、プログラムの全体像が想像出来ていない状態です。
どなたかこの問題についての考え方やイメージなど、お知恵をお貸しください。よろしくお願い致します。

  • 可能であればタイトルはもう少し具体的にしましょう。
    とりあえず問題文のままではなく、解答まで行かないまでも一回はキーボードの入力を受け取る処理を書いてみてはどうでしょうか。
    -

回答

キー入力の基本Sampleは下記です。
あとは...

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class BufferedReaderExample { 

    public static void main(String[]args)throws IOException{ 

        InputStreamReader ISR = new InputStreamReader(System.in); 
        BufferedReader BR = new BufferedReader(ISR); 

        System.out.println("What's your name?"); 
        String userInput = BR.readLine(); 

        System.out.println("Your name is : " + userInput); 

        BR.close(); 
        ISR.close(); 
    } 

}

編集 履歴 (1)

最初に宣言してあるimport文のAPIが、このプログラムにおいてどのように作用するのか?というのがいまいち理解出来ません。

「いまいち理解できません」だと逆にどこまで理解しているか読み手にわかりません。これだけしか書いてないと「全然わかりません」と言っているのと同じなのです。BufferedReader, IOException, InputStreamReaderの機能やAPIの仕様を教科書なりAPI Documentなりを読みまずは自分で試すということをしてみてください。さもないと「この問題の答えを教えて」というまるなげ質問になってしまいます。

無限ループ中にキーボードからの入力???

出題者がいわんとしているのは、要するに以下です。

(1)「ある処理」を何度も繰り返しすプログラムを書きなさい。
(2)「ある処理」とは「キーボードから入力を受け取って受け取った文字列を出力する」です。
(3)キーボードから受け取った文字列が"END"の場合は繰り返しをやめます(つまりループから抜ける)

while (true) { ... }をもって無限ループといったりします。そういうループの内側にある処理を行うことを「無限ループの中である処理をする」といったりました。また、whileループの条件(trueと書いてあるところ)にあえて終了判定を書かずにwhileループの内側で終了判定をしbreak文によりループを終了することを「終了判定が成立したら無限ループを抜ける」などということがあります。要するに以下のような処理です。

  while (true) {
    ある処理
    if (終了判定) {
      break;
    }
  }

個人的には「ループを抜ける終了条件がちゃんとあるのだから無限ループじゃないじゃん」などと思ってしまいます。質問者さんもそういう意味で混乱されたのだと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。