• 締切済み

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までの数値を指定してください。

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

回答No.3

/* 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)
回答No.2

はじめまして。 以下答えです。書き方は個人差あるのであしからず。 ちょっと厳しいこと言うかもしれませんが、これは自分で考えて 解かないとだめだと思います。 まず教材を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)
回答No.1

1、2も判らないの…? もう一度、教材を読み直した方が良い…。

関連するQ&A

  • javaの初心者向けプログラムの宿題です

    「指定された値の倍数を10個表示するプログラム」 です。 選択授業で取ったjavaプログラミングの宿題ですが行き詰ってしまいました。 部分的にはなんとなく理解できるのですが、全体像がつかめません。 流れだけでもご教示願います。 (1)値の入力を促す「数値入力」メッセージを表示し、文字列入力を待機する。 (2)その入力から文字列を取得して文字列をint型の数値に変換。 (3) 入力された文字列が数値以外の場合は、例外(NumberFormatException)が発生した場合に、メッセージ「半角数字で数値指定」を表示してアプリケーションを終了。 (4) 倍数を表示できる数値の範囲は、2以上100未満、範囲外の数値が入力された場合にはメッセージ「[入力から取得した数値]の倍数は表示できません。0から100までの数値を指定してください。」を表示してアプリケーションを終了。 注) 処理を開始するメッセージを表示し、入力された数値の倍数を標準出力に10個表示する。 各数値は、タブ(¥t)で区切り、5個表示毎に改行。 倍数は、0を含めて表示。 よろしくおねがいします。

  • エクセルで半角数字には数値と文字列がある?

    http://okwave.jp/qa/q6473596.html の質問を見て私も納得がいかず質問させていただきます。 たとえば、A1セルの書式を文字列に設定してから半角で数字を打ち込むと数字は数値でなく文字列としてセルに入ります。 この入力後、A1セルの書式を標準や数値に直してもそのセルの中の数字は左に寄ったままで文字列のままでいるようです。 (でもこれをセルの中でエンターキーを押したりすると数値になってしまいますが) 次にB1セルの書式を標準あるいは数値にして数字を打ち込むと、当然のことですが数字は数値としてセルに入ります。 この入力後、B1セルの書式を文字列に変えると数字は左に寄りますから一見文字列になったように見えます。 ところが上記のセルとこのセルをA1=B1で試してみるとFALSEが返ります。 逆に同じ数字を数値として打ち込んだセルと=で試すとTRUEが返ります。 これはA1とB1は同じ文字列としての数字ではないという証拠だと思います。 B1セルの書式を標準に戻すとまた数字は右よりにもどりますから、セルの中の数字は数値のままのようです。 つまり、半角の数字にはセルの書式にかかわらず文字列と数値の二つがあるということなのでしょうか? だとしたらこの二つはどうやって区別すればいいのでしょうか?

  • java 9の倍数 プログラム

    数字による長い文字列を入力し、それが9の倍数であるかないかを出力するプログラム。但し、9の倍 数であることの判定は、次のように行うこととする。すなわち、%(あまり)は使わないこととする。 423711は、9の倍数である。 4+2+3+7+1+1=18 1+8=9 ⇒ 9となれば、9の倍数 385772は、9の倍数でない。 3+8+5+7+7+2=32 3+2=5 ⇒ 9未満となれば、9の倍数ではない。 “d=Integer.parseInt(s);”を用いると、大きな桁数の入力につ いてエラーとなってしまう。そうならないようなプログラム 。 通報する

  • アクセス:Inputboxへの文字列補正について

    Inputboxへの入力後エラーを防止するために、(1)~(3)の条件を指定したいのです。 (1)数値(半角)以外を入力できないようにしたい (2)文字列中もしくは文字列前後に空白が含まれる場合は削除したい (3)全角で数値を入力した場合は、半角に補正されるように指定したい (4)文字が入力されたら、「数字を入力してください」というメッセージをいれる 一気に色々な補正をかけようとしたら、エラーになってしまいました。 うまく関数を組み立てることができません。。。 よろしくお願いいたしますm(_ _)m

  • C言語の問題

    配列の問題 1.キーボードから入力したアルファベットの大文字(A~Z)の入力回数をそれぞれ数え、結果を画面出力するプログラムを作成せよ。但し、入力の終了はEOFとし、入力回数のカウントには、配列を用いるものとする。(文字ごとに回数を格納する配列を用意する) 2.キーボードから番号(数字)を入力し、その番号に該当する文字列中の文字を画面表示するプログラムを作成せよ。なお、数字以外の文字が入力した場合と、文字列の範囲外の数字が入力された場合は、任意のメッセージを出力し、再入力するようにする。また文字列はキーボードから入力するものとする。 この問題が解けなくて困ってます。どうか知恵をかしてください。

  • エクセル セルの表示形式「文字列」だけを抽出したい

    エクセル2007を使用しています。 A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 この「文字列」のセルだけを抽出したいのです。 例えば、関数などを利用して、B列に表示するなど。 よろしくお願いします。

  • 4つのJavaファイルについての質問

    この4つのプログラムを実行するためのtera padへの入力表記(?)が分かりません、分かる方どうか教えてください!(1つだけでも嬉しいです!) (1.)コマンドラインから整数値を入力して、入力された数値が 10 かそれより大きいかを判断し、メッセージを表示します。   (入力された数値が 10 かそれより大きい場合は okメッセージを出力し、それ以外の場合はNGメッセージを出力します。)このプログラムを作成してください。 (2.)1から200までの数値の中の7の倍数を表示させるプログラムを作成してください。 (3.)1から100までの数値の総和を計算・表示するプログラムを作成してください。 (4)実行結果が 出力したいアスタリスク(*)の数を入力してください: 10 10を入力されました。 **********となるプログラムを作成してください。

  • java 文字列の部分一致について

    /* 1から50まで順に数を表示する。 但し、その数が3の倍数か3の付く数字の場合、数字の後に!を表示する。 5 の倍数の場合は、数字の後に?と表示する。 両方の条件に合致した場合、数字の後に!?と表示する。 */ class Show{ public static void main(String[] args){ int i = 1;    while(i <= 50){       if(i % 3 == 0 && i % 5 ==0){        System.out.println(i + "!?");      }else if(i % 5 == 0){        System.out.println(i + "?");      }else if(i % 3 == 0){        System.out.println(i + "!");      }else{        System.out.println(i);      }      i++;   } } このような問題で、3を含む数字、とあるので、文字列の部分一致を検索する時に使用するStringクラスのindexOfを使用するのでは?と考えています。しかし、こちらはequalsで判定しますが、3の倍数は上記のコードにもある通り、==で判定しています。文字列判定と ==演算子は同じif(条件)の中には入れる事が出来ないので、じゃあどうする?という具合になってしまっています。どなたか「数が3の倍数か3の付く数字の場合」の処理を教えて頂けないでしょう?よろしくお願い致します。

    • ベストアンサー
    • Java
  • 【Excel】セルの書式設定で標準と文字列の違い

    「セルの書式設定」の「表示形式」での「標準」と「文字列」の違いについてです。 「文字列」は「[文字列]は、数値も文字列として扱います。セルには入力した値がそのまま表示されます」 とあります。 しかし「文字列」に数値を入力するとセルの左上に、グリーンの▼印がでてきて、「数値が文字列として保存されています」というエラー表示がでます。 数値も文字列として扱われるはずですがなぜなのでしょう。いちいち「エラーを無視する」にしなければならないので面倒だなと思いますので、今度は「標準」で入力しようと思いますが、 「標準」は「セルの値に対して一般の書式を適用します(特定の書式を指定しません)」 とのことです。一般の書式、特定の書式が何を指すのか分かりません。 文字列が、数値として扱われない理由と、「標準」「文字列」のそれぞれの特徴を教えてください。

  • エクセルの表示について

    エクセルで数値を入力して、その数値が、列の幅より長いと、通常「######」と表示されますが、文字列では、幅が狭くても、狭い範囲分が表示されます。 数値を入力したときに、文字列のように、表示できる分だけ表示させるようにはできますか?

専門家に質問してみよう