Javaの参考書に掲載されている問題について質問

このQ&Aのポイント
  • 「5n+1」とか「5n+2」とかを表示させる意図はなんですか?全然わからないです、、
  • たとえば、余りが1の場合、5nの答えは5n+1だから、5n+1を表示させるということでしょうか?
  • 質問者は、Javaの参考書に掲載されている問題の答えのソースコードの意図が理解できず、具体的な意図を聞きたいとしています。
回答を見る
  • ベストアンサー

Javaの参考書に掲載されている問題について質問

以下が、その問題文と解答となるソースコードです。 疑問点があるので質問します。 キーボードをタイプして変数nに整数を入力し次のように処理するプログラムを作成しなさい 5で割った余りが0ならば "5n"と表示する 5で割った余りが1ならば "5n+1"と表示する 5で割った余りが2ならば "5n+2"と表示する 5で割った余りが3ならば "5n+3"と表示する 5で割った余りが4ならば "5n+4"と表示する 以下がその答えのソースコードです。 package 第10章; import lib.Input; public class 練習10の1の2 { public static void main(String[]arg){ int n=Input.getInt(); switch(n%5){ case 0: System.out.println("5n"); break; case 1: System.out.println("5n+1"); break; case 2: System.out.println("5n+2"); break; case 3: System.out.println("5n+3"); break; case 4: System.out.println("5n+4"); } } } 質問:"5n+1"とか"5n+2"とかを表示させる意図はなんですか? 全然わからないです、、 もしかして、例えば、余りが1の場合、5*nの答えは、5*n+1だから、5n+1を表示させるということでしょうか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

数学的には、整数mが5で割って余りrなら m=5n+r (nは整数) という意味はありますが... 究極には「そういう仕様だから」です。

wantanton
質問者

補足

>数学的には、整数mが5で割って余りrなら m=5n+r (nは整数) ここ詳しく聞かせてください! 数学的意味が知りたいです

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

数学的な意味はこれ。というか定義。 http://ja.wikipedia.org/wiki/%E9%99%A4%E6%B3%95 くりかえすけど、プログラム的な意味は 「5で割った余りが0ならば "5n"と表示する 5で割った余りが1ならば "5n+1"と表示する 5で割った余りが2ならば "5n+2"と表示する 5で割った余りが3ならば "5n+3"と表示する 5で割った余りが4ならば "5n+4"と表示する」 という仕様を満たしたプログラムの一例、というだけ。たまたま数学と一致している、というだけ。 例えば 「5で割った余りが3ならば "5n+1"と表示する」 という仕様だったら 「13」と入力して「5n+1」と表示されるのが「仕様的に正しいプログラム」

関連するQ&A

  • javaじゃんけんゲーの質問

    このjavaじゃんけんゲームで 0を押すまでじゃんけんが続いて0押したら終了して、終了と表示して、じゃんけんの勝敗が表示されるように作りたいんですけどどうしたらいいですか?教えてください import java.io.*; class kadai6 { public static void main(String args[]) throws IOException { System.out.println("これは、じゃんけんゲームです。"); System.out.println("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)さぁどれにしますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res =Integer.parseInt(str); switch(res){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("あなたの入力した値はエラーです。1~3の値を入力してください。"); System.exit(1); break; } int comp = (int)(Math.random()*3) + 1; switch (comp){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; default: System.out.println ("エラーです。"); break; } switch (res -comp) { case -2: System.out.println("コンピュータの勝ちです。"); break; case -1: System.out.println ("あなたの勝ちです。"); break; case 0: System.out.println ("あいこです。"); break; case 1: System.out.println ("コンピュータの勝ちです。"); break; case 2: System.out.println("あなたの勝ちです。"); break; default: System.out.println ("エラーです。"); break; } } }

  • JAVAで素数判定

    JAVAの勉強をしてます 練習問題で、素数判定のプログラムをしているのですが。 1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか? //読み込んだ数字 n が 15 の場合 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.println("素数です。"); break; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 多次元配列について質問

    以下はあるJavaの参考書の問題文とその解答ソースコードです。 疑問点があるので、質問に答えてくだされば幸いです! 問題文:じゃんけんゲームを作成します。ジャンケンは次の図のように数値で表します。勝敗表も示します。(『次の図』と『勝敗表』は、Upした画像を参考にしてください。) 次のメソッドを持つクラスを作成します。 A.rand3メソッド ・乱数を使って1,2,3のどれかの値を作成して返す(グー、チョキ、パーにあたる) B.jankenメソッド ・人が入力したじゃんけんの種類(1,2,3のどれか)を仮引数nに受け取り、次の処理を行う。 1:rand3メソッドでコンピューター側のじゃんけんの値を変数mに得る 2:mとnを比較して次のどれかの値を返す ・人が勝ちなら 1・コンピューターが勝ちなら2 ・引き分けなら0 C. isJankenメソッド ・int の値を仮引数nに受け取り、nが1,2,3のどれかであるときtrue、そうでなければfalseを返す D.mainメソッド ・キーボードをタイプして1,2,3のどれかの値を入力し、それを実引数としてjankenメソッドを呼び出し、勝敗を表示する。   1:isJankenメソッドを使って、人が入力した数値が1,2,3のどれかであるかどうか検査し、もしも1,2,3以外なら「入力した値が正しくない」と表示して直ちに処理を終了します。 2:入力値が正しければ、jankenメソッドを実行する。   3:結果は、「勝ち」「負け」「引き分け」のどれかの文字列を表示する。 ------解答ソースコード------- package 第16章; import lib.Input; public class 通過テスト2 { public static void main(String[]arg){ int n=Input.getInt(); if(isJanken(n)){ System.out.print(n+":"); switch(janken(n)){ case 0: System.out.println("引き分け"); break; case 1: System.out.println("勝ち"); break; case 2: System.out.println("負け"); break; } }else{ System.out.println("入力した値が正しくない"); } } public static int rand3(){ int com=(int)(Math.random()*3+1); return com; } public static boolean isJanken(int n){ if(n==1||n==2||n==3){ return true; }else{ return false; } } // public static int janken(int n){ int[][]tb1={ {9,9,9,9}, {9,0,1,2}, {9,2,0,1}, {9,1,2,0} }; int m=rand3(); System.out.println(m+" "); return tb1[n][m]; } } -----解答ソースコード終----------- 質問:Jankenメソッドの2次元配列について、その意味が全然わかりません。Upした画像の「勝敗表」を表してるのはわかるのですが、その勝敗表とどのような対応関係にあるのかわかりません。 具体的な疑問点は以下の2点です  1点目:何故「9」という数字があるのかわかりません。  2点目:何故2次元目の要素数が「4つ」あるのかわかりません。1次元目の要素数も4つありますが、それもわかりません。 ごめんなさい、、ほんとに何もかもわからない。手取り足取り教えていただきたいです。。

    • ベストアンサー
    • Java
  • Javaでクイズ作成途中もエラー

    あの、以前こちらで質問した者です。→http://okwave.jp/qa/q6482901.html 今、英単語が表示され日本語でそれを答えるクイズを作ろうとしています。 まだまだ作りかけですが、どうしてもコンパイル時にエラーになってしまいます。 どこから直せば良さそうですか?自己研究ということで周りに質問する人がいません。 すみませんがヒントを頂けたらと質問しました。よろしくお願いします。 import java.io.*; public class EnglishToJapaneseQuiz { public int MAX_QUESTION = 5; public int GOODANSWER = 0; public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("Welcome! This quiz helps you study Japanese in English"); System.out.println("'n' normal"); System.out.println("'h' hard"); System.out.println("'e' expert"); System.out.println("'z' exit"); System.out.println("Please select the level"); String line = reader.readLine(); char c = line.charAt(0); switch (c) { case 'n': System.out.println("You selected normal"); for (int i=0; i<MAX_QUESTION; i++) { int x = (int)(Math.random() * 10) + 1; switch (x) { case 1: System.out.println("School"); String Answer = "学校"; BufferedReader responce = new BufferedReader(new InputStreamReader(System.in)); String line = responce.readLine(); If (line.equals(Answer)) { System.out.println("correct"); GOODANSWER = GOODANSWER + 1; } else { System.out.println("incorrect"); } break; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: } } break; case 'h': System.out.println("You selected hard"); break; case 'e': System.out.println("You selected expert"); break; case 'z': break; default: System.out.println("you must indicate valid character"); break; } } catch (IOException e) { System.out.println(e); System.out.println("invalid value"); } System.out.println("the program was successfully ended"); } }

    • ベストアンサー
    • Java
  • switch で疑問。java超初心者です。

    まず、 public class P1{   public static void main(String[] args){     int n = 1;       switch(n){         case 0:           System.out.println("あ");           break;         case 1:           System.out.println("い");           break;         case 2:           System.out.println("う");           break;         default:           System.out.println("え");       }   } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{   public static void main(String[] args){     int n = 1;     String s;       switch(n){         case 0:           s="あ";           break;         case 1:           s="い";           break;         case 2:           s="う";           break;         default:           s="え";       }       System.out.println(s);   } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。     System.out.print(s);                ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JAVAのwhileループについての質問です

    こんばんわ。 javaのforループをwhileループ構文に書き換える問題で詰まっています。 僕はプログラミング超初心者なので、いろいろ考えたが、なかなか答えが出ていません。 ぜひ、わかる方に教えていただきたくここで質問させてもらいました。 ソースコードは以下です class S7j4{ public static void main(String args[]){ short a[] = {26,54,39,71,83,100,98,47,82,65}; short work; int i,j,n; n = 10; for (i = 0;i< n; i++) System.out.print(a[i] +" , "); System.out.println(); for(i = 0; i < n; i++) for(j = 0; j < n;j++) if(a[i] < a[j]){ work = a[i]; a[i] = a[j]; a[j] = work; } for(i = 0; i< n;i++) System.out.print(a[i] + " , "); System.out.println(); } } ぜひ一つよろしくお願いしますm(-_-)m

  • Javaの課題について質問です。パート(2)

    import java.io.Console; public class A23_exec { public static void main(String args[]){ try{ A23_StrArray list = new A23_StrArray(); System.out.println("-------------------------------処理メニュー-------------------------------"); System.out.println("| 01・・・要素を追加 02・・・指定のインデックスの要素を上書き|"); System.out.println("| 03・・・指定インデックスの要素を表示 04・・・全ての要素を削除 |"); System.out.println("| 05・・・全ての要素を表示 06・・・全てのインデックス数を表示 |"); System.out.println("| 07・・・全ての要素を昇順でソート 08・・・全ての要素を降順でソート |"); System.out.println("| 09・・・ファイルの読込み 10・・・ファイルを追記して読込み |"); System.out.println("| 11・・・ファイルを上書きして読込み 12・・・ファイルに書込み |"); System.out.println("| 13・・・ファイルに追記して書込み 14・・・ファイルに上書き書込み |"); System.out.println("| 99・・・処理を終了 |"); System.out.println("--------------------------------------------------------------------------"); System.out.println(" ※処理メニュー以外のNoを入力しても処理出来ませんので注意して下さい。"); System.out.println(" ※全て半角英数字で入力して下さい。"); System.out.println(" ↓処理Noを入力して下さい。↓"); while(true){ System.out.println("-----処理No-----"); String inputData = input(); if(inputData.equals("99")){ System.out.println("終了"); System.exit(0); break ; } else if(inputData.equals("01")){ System.out.println("要素追加"); inputData = input(); list.add(inputData); } else if(inputData.equals("02")){ System.out.println("指定インデックスの要素の上書き"); inputData = input(); list.set(0,inputData); System.out.println(list.toString()); } else if(inputData.equals("03")){ System.out.println("指定インデックスの要素を表示"); inputData = input(); System.out.println(list.get(0)); } else if(inputData.equals("04")){ System.out.println("全ての要素を削除"); list.clear(); } else if(inputData.equals("05")){ System.out.println("全ての要素を表示"); list.getAll(); System.out.println(list.getAll()); } else if(inputData.equals("06")){ System.out.println("全てのインデックス数を表示"); int item =list.getIndex(); System.out.println(item); } else if(inputData.equals("07")){ System.out.println("全ての要素を昇順でソート"); list.sort(list.ASC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("08")){ System.out.println("全ての要素を降順でソート"); inputData = input(); list.sort(list.DESC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("09")){ System.out.println("ファイルの読み込み"); inputData = input(); list.readFile(inputData); } else if(inputData.equals("10")){ System.out.println("ファイルを追記して読み込み"); inputData = input(); list.readFile(inputData,true); } else if(inputData.equals("11")){ System.out.println("ファイルを上書きして読み込み"); inputData = input(); list.readFile(inputData,false); } else if(inputData.equals("12")){ System.out.println("ファイルに書き込み"); inputData = input(); list.writeFile(inputData); } else if(inputData.equals("13")){ System.out.println("ファイルに追記して書き込み"); inputData = input(); list.writeFile(inputData,true); } else if(inputData.equals("14")){ System.out.println("ファイルに上書きして読み込み"); inputData = input(); list.writeFile(inputData,false); } else{ System.out.println("処理Noが違います。"); } } }catch(Exception e){ System.out.println(e); } } private static String input(){ try{ Console cns = System.console(); //String input= cns.readLine(); return cns.readLine(); } catch(Exception e){ System.out.println(e); return ""; } } } 宜しくお願い致します。

  • JAVAのfor文で困っています。

    JAVAの勉強をしていますが、本の練習問題でわからなくて困っています。for文で以下の処理を行いたいです(do,whileはなしです)が、 *を5個ごとに改行したいのですが、改行してくれません。 問題の部分↓ if (n % 5 == 0) System.out.println(); 何か良い方法はありませんか?お願いします。 ------------------------------------------------- //(数を読み込んで)だ個数だけ * を5個ごと改行しながら表示 int n = 0; for (int i = n; n <= 0;){ System.out.print("何個*を表示しますか : "); n = stdIn.nextInt(); } for (int i = 1; i <= n; i++){ System.out.print("*"); if (n % 5 == 0) System.out.println(); } ------------------------------------------------

    • ベストアンサー
    • Java
  • java 会員登録プログラム

    2番目の参照で困ってます。Member.java といったクラスファイルを使ってます。コンストラクタやゲッター、セッター等が入ってます。省略箇所有りですがどうぞ宜しくお願いします。 public class MemberSystem { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ //loopを使い随時メニュー表示 boolean loop = true; while(loop){ System.out.println(""); System.out.println("ご希望のオプション番号を選択してください"); System.out.println("1>>登録 2>>参照 3>>検索 4>>削除 5>>保存 6>>読込 7>>終了"); String line = reader.readLine(); int n = Integer.parseInt(line); //ArrayList<Member>型のインスタンスを作成し、ArrayList<Member>型の変数rに代入 ArrayList<Member> r = new ArrayList<Member>(); switch (n) { case 1: System.out.println("登録>> 各情報を入力すると登録できます"); System.out.println("氏名"); String inputName = reader.readLine(); //エラーチェック 空入力 if(inputName.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("生年月日 例)2013/01/01"); String inputBirth = reader.readLine(); //エラーチェック 空入力 if(inputBirth.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("電話番号 例) 0901234567"); String inputTel = reader.readLine(); //エラーチェック 空入力 if(inputTel.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } //reader.redLineで取得したString型の情報を代入 r.add(new Member(inputName, inputBirth, inputTel)); System.out.println("下記、入力情報をストアし、会員ID番号を付加しました"); //入力情報と会員ID番号を表示 for(Member inputResult:r){ System.out.print(inputResult); } break; case 2: System.out.println("参照>> ご希望の会員情報を表示します"); System.out.println("会員ID番号を入力してください 例)0001"); //キーボード入力からデータを呼び込む String inputMemberID = reader.readLine(); //ここがうまくいきません。 for(Member inputResult :r) { if(inputMemberID.equals(inputResult.getID())){ //データ取得  System.out.println(inputResult); //エラーチェック 空入力 }else if(inputMemberID.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); //エラーチェック 番号がない時や一致していない時 }else{ System.out.println("あなたの会員ID番号は該当しません"); System.exit(0); } } break; case 3: System.out.println("検索>> ご希望の会員を検索します 検索方法を番号で選択してください"); System.out.println("1>>氏名 2>>生年月日 3>>電話番号"); //switchを使い、検索選択肢を表示 String search = reader.readLine(); int x = Integer.parseInt(search); switch (x) { case 1: System.out.println("氏名"); String searchName = reader.readLine(); for(Member inName : r) { if (searchName.equals(inName.getName())){ System.out.print(inName); } } break; case 2: System.out.println("生年月日"); String searchBirth = reader.readLine(); break; default: System.out.println("電話番号"); String searchTel = reader.readLine(); break; } break; case 4: System.out.println("削除>> ご希望の会員を削除します"); System.out.println("会員ID番号を入力してください 例)0001"); String deleteMemeb