- 締切済み
JavaのE-learning教材の問題です
書き出し以外理解不能です。部分的には少し分かるのですがもお手上げ状態です。 1. クラス名は、Test1クラスとし、このクラスにメインメソッドを実装する。 2. アプリケーションを起動すると、数値の入力を促すメッセージ(1)を表示し、文字列が入力されるのを待機する。 3. 標準入力から文字列を取得し、その文字列をint型の数値に変換する。 4. 入力された文字列が数値ではない場合は、例外(NumberFormatException)が発生した場合に、メッセージ(3)を表示し、アプリケーションを終了する。 5. 倍数を表示できる数値の範囲は、2以上100未満とし、範囲外の数値が入力された場合にはメッセージ(4)を表示し、アプリケーションを終了する。 6. 処理を開始するメッセージ(2)を表示し、入力された数値の倍数を画面(標準出力)に20個表示する。それぞれの数値は、タブ(¥t)で区切り、5個表示する度に改行を入れる。 7. 倍数は、0を含めて表示を行うこと。 (例) 3の倍数(0 3 6 9… 54 57) メッセージ名 メッセージ内容 メッセージ(1) 数値を入力してください(半角数字) : メッセージ(2) [標準入力から取得した数値]の倍数を表示します。 メッセージ(3) 半角数字で数値を指定してください。 メッセージ(4) [標準入力から取得した数値]の倍数は表示できません。0から100までの数値を指定してください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- OrangeCup150
- ベストアンサー率62% (109/174)
/* Test1.java */ import java.io.Console; public class Test1 { static final int MIN = 2; static final int MAX = 99; static final int COLUMN = 5; static final int DISP = 20; public static void main(String[] args) { Console c = System.console(); c.printf("数値を入力してください(半角数字) :"); String s = c.readLine(); try { int x = Integer.parseInt(s); if (MIN <= x && x <= MAX) { c.printf("[標準入力から取得した数値]の倍数を表示します。\n"); for (int i = 0; i < DISP; i++) { int pos = i % COLUMN; if (pos == 0) { /* 行頭書式 */ c.printf("%d", x * i); /* 数値の桁揃えをする場合は c.printf("%4d", x * i); */ } else if (pos != (COLUMN - 1)) { /* 行中書式 */ c.printf("\t%d", x * i); /* c.printf("\t%4d", x * i); */ } else { /* 行末書式 */ c.printf("\t%d\n", x * i); /* c.printf("\t%4d\n", x * i); */ } } } else { c.printf("[標準入力から取得した数値]の倍数は表示できません。0から100までの数値を指定してください。\n"); } } catch (NumberFormatException e) { c.printf("半角数字で数値を指定してください。\n"); return ; } } } あとがき これはよくある演習問題です。 ・if 文, for 文, try - catch - finally 文の組み合わせ方 ・比較演算子、論理演算子の組み合わせた if 文の組み合わせ方 ・入出力命令の組み合わせ方 ・書式切替の書き方(剰余演算子の使い方(先頭判定、末尾判定、中間判定)) ただ、これ明らかにC言語ベースのやつを Java に転用したって感じですね。(標準入力、標準出力という単語が出てくるあたりなど) たぶん、C言語の printf や scanf が使えなくてプログラムの学習に不向きだったのを、 Java が最近になってようやく、 printf, readLine を実装したためC言語用の教材を Java に転用したってことだろうけど。(過去の Java で標準(コンソール)入力は奇怪なものでしかないわけで、初心者の学習の妨げでしかない時代がありました。クラス、インスタンス、入出力ストリームとフィルタについては後で学ぶべき(接するべき)概念なのに、始めから奇怪な概念(ストレス)と接するという問題です。) ちなみに、Java (Integer.parseInt) は全角数字を扱えるので、入力文字種を半角とすることにこだわる必要はないです。(C言語は半角数字で入力する必要がありました。)
- tegra
- ベストアンサー率64% (9/14)
はじめまして。 以下答えです。書き方は個人差あるのであしからず。 ちょっと厳しいこと言うかもしれませんが、これは自分で考えて 解かないとだめだと思います。 まず教材を1からやり直してちゃんと理解しましょう。 それでも分からないのであれば教材を変えないとだめです。 どんな目的でプログラムを始めたかはわかりませんが 入門レベルですので、きちんと基礎をやらないと 自分が思ったものは作れませんよ。 がんばってくださいな。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test1 { /** * @param args */ public static void main(String[] args) throws IOException { // 入力待ち BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("数値を入力してください(半角数字)"); // 入力した値を取得 String str = in.readLine(); int num; try { // int型に変換 num = Integer.parseInt(str); } catch (NumberFormatException e) { // 数値じゃない場合はメッセージを表示して終了 System.out.println("半角数字で数値を指定してください。"); return; } // 2以上100未満を判定 if (num < 2 || num >= 100) { System.out.println(num + "の倍数は表示できません。2から100までの数値を指定してください。"); return; } System.out.println(num + "の倍数を表示します。"); // 入力値の倍数を20個表示する for (int i = 0; i < 20; i++) { System.out.print((num * i) + "\t"); // 改行入れる if ((i + 1) % 5 == 0) { System.out.println(); } } } }
- edomin7777
- ベストアンサー率40% (711/1750)
1、2も判らないの…? もう一度、教材を読み直した方が良い…。