• 締切済み

プログラミングわかんないです(JAVA)

1、5人分の、番号国語の点数、算数の点数を格納できるような、2次元行列を作成する 2、次にキーボードから5人の番号と国語と算数の点数を入力して配列に格納する。 3、次に国語と算数のごうけいが高いものを順に、番号と国語と算数をならびかえる。 4、最後に合計の高い順に番号を画面に出力する

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

みんなの回答

回答No.3

main() の定義に public static void main(String[] args) throws IOException { って感じで IOEXception を明示すればどうですか。

dynabookwindow
質問者

補足

合計が高いもの順にがめんに出力なのに合計が低いじゅんになってますよ??勘違いだったらすいません

回答No.2

便利なクラスや例外、関数を使わないと、すごく長くなります。 main() メソッドの中で、選択ソート (selection sort) という アルゴリズムを使っています。 奥村晴彦、他『Java によるアルゴリズム事典』技術評論社、2003 をちょっと変えただけです。参考 URL に Java のソースが全て 公開されているので、学習に便利かと思います。 import java.io.*; class QA8293186 { private final static int student = 5; private final static int subject = 3; // (id lang math) public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int[][] grade = new int[student][subject]; for (int i = 0;i < student; i++) { int[] person = new int[subject]; int j = 0; while (j < subject) { String prompt = new String(); switch (j) { case 0: prompt = "id ? "; break; case 1: prompt = "lang ? "; break; case 2: prompt = "math ? "; break; default: System.exit(1); } System.out.print(prompt); grade[i][j] = Integer.parseInt(in.readLine()); j++; } } System.out.println("in:"); for (int i = 0; i < student; i++) { for (int j = 0; j < subject; j++) { System.out.print(grade[i][j]); if (j != subject - 1) { System.out.print(" "); } } System.out.println(); } // selection sort // via (c) 2003 Okumura, "Algorithm Encyclopedia by Java", Tokyo, Japan. for (int i = 0 ; i < student - 1; i++) { int high_score = grade[i][1] + grade[i][2]; int j = i; for (int k = i + 1; k < student; k++) { int compare = grade[k][1] + grade[k][2]; if (compare > high_score) { high_score = compare; j = k; } } if (i < j) { int[] save = grade[j]; grade[j] = grade[i]; grade[i] = save; } } // via end. System.out.println("out:"); for (int i = 0; i < student; i++) { for (int j = 0; j < subject; j++) { System.out.print(grade[i][j]); if (j != subject - 1) { System.out.print(" "); } } System.out.println(); } } }

参考URL:
http://oku.edu.mie-u.ac.jp/~okumura/java-algo/
dynabookwindow
質問者

補足

長くてもいいのでわかりやすく書いてください//ちなみに上のコードエラーが発生しましたよ??

回答No.1

Java 勉強中です。 C.java: import java.util.*; class C {  private final static int student = 5;  private final static int subject = 3; // (id lang math)  public static void main(String[] args) {   Scanner in = new Scanner(System.in);   ArrayList<ArrayList<Integer>> grade = new ArrayList<ArrayList<Integer>>();   String prompt = new String();   Integer k = 0;   while (grade.size() < student) {    ArrayList<Integer> person = new ArrayList<Integer>();    while (person.size() < subject) {     try {      switch (person.size()) {       case 0: prompt = "id ? "; break;       case 1: prompt = "lang ? "; break;       case 2: prompt = "math ? "; break;       default: System.exit(1);      }      System.out.print(prompt);      k = new Integer(in.next());     } catch (Exception e) {      System.err.println("ignore"); continue;     }     person.add(k);    }    grade.add(person);   }   System.out.println(grade);   grade.sort(new privateComparator());   System.out.println(grade);  } } class privateComparator implements Comparator<ArrayList<Integer>> {  @Override  public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {   return (a.get(1) + a.get(2)) - (b.get(1) + b.get(2));  } }

dynabookwindow
質問者

補足

try catch returnなど難しい言語使わないでください 初心者なのでわかりません

関連するQ&A

  • プログラミングお願いします{JAVA}

    1、5人分の、番号国語の点数、算数の点数を格納できるような、2次元行列を作成する 2、次にキーボードから5人の番号と国語と算数の点数を入力して配列に格納する。 3、次に国語と算数のごうけいが高いものを順に、番号と国語と算数をならびかえる。 4、最後に合計の高い順に番号を画面に出力する。

  • プログラミングお願いします(java)

    1、5人分の、番号国語の点数、算数の点数を格納できるような、2次元行列を作成する 2、次にキーボードから5人の番号と国語と算数の点数を入力して配列に格納する。 3、次に国語と算数のごうけいが高いものを順に、番号と国語と算数をならびかえる。 4、最後に合計の高い順に番号を画面に出力する。 出来るだけ簡単にお願いします。forとifそして配列を組み合わせてお願いします。

  • プログラミングわかりません・お願いします

    プログラミングお願いしますJAVAです 問題 番号を収納する配列と、テストの点数を格納する配列をそれぞれ用意する。要素数はそれぞれ5とする。キーボードから受験生の番号とテストの点数を入力してそれぞれの配列に順に格納する。最後に、テストの点数が最高点だった学生の番号を画面に表示するコードを作成しなさい <ヒント>テストの点数を格納している配列で、テストの最高点が格納されている番号を調べれば、番号を格納する配列から、番号を参照できます

  • C言語、配列の積

    整数型二次元配列x,yに適当な値をキーボードから入力し、次にそれらの行列の積を計算して二次元配列zに代入し、行列x,y,zの要素を出力せよ。但し、配列の大きさは最初にキーボードから入力しておき、変数宣言においては、配列の大きさを大きめに宣言しておき、キーボードから入力する配列の大きさはその範囲内で入力するようにせよ。 という問題です。よろしくお願いいたします

  • 次のプログラミングがわかりません。

    次のプログラミングがわかりません。 Basicでのプログラミングです。 Visual Basicではありません。 Data "AA", 63, 80, 76 Data "AB", 70,100, 87 Data "AC", 69, 85, 48 ・ ・ ・ Data "ZX", 63, 37, 83 Data "ZY", 81, 40, 75 Data "ZZ", 35, 88, 98 という26^2個のデータがあり、氏名,英語の点数,数学の点数,国語の点数と並んでいます。 データの番号(上から順に番号をつけます。) を入力したとき,その番号の人の氏名,各科目の点数,順位,評価とします。 例えば、2を入力すると, Input  データ番号 2 名前 AB     英語   数学   国語  総合 点数 70 100 87 257 順位  437 1 169 93 評価 D A B A と表示するプログラムを作りたいです。 評価は順位から決めるものとし, 1~100:A 101~200:B 201~350:C 351~500:D 501~676:E と評価します。 まずは、データをすべて配列変数に読み込んでから,それを処理するという手順でのプログラムを教えてほしいです。 英語だけの処理でもかまいません。 Data文は、ファイルに添付しておきます。 よろしくお願いします。

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • COBOLで内部ソートをしたいです

    COBOLで内部ソートをしたいです 生徒一人ひとりの成績データから上位点数のものを3教科得点としたいです。 項目名 変数名 国語 wk-kok 算数 wk-san 社会 wk-sha 理科 wk-rik 体育 wk-tai 3教科合計 wk-3kei これで3教科の合計を点数が高い順に上位3教科で合計としたい場合、 単純に国語と算数を比べて、次は国語と社会を比べて・・・とそんなやり方しか思いつかないのですが 何か良い方法はないでしょうか。 使用しているのは富士通のNETCOBOLです。

  • C#です。データの出力について

    C#です。 二次元配列に格納したデータをメモ帳に出力したいのですが、どうすればいいですか? 二次元なので、それぞれをカンマで区切って出力したいのですが、やり方がわかりません。教えて下さい(><) 例)りんご,1   トマト,2   バナナ,3   みかん,4 などの二次元配列をこのように、カンマで区切った状態で出力したいんです。できれば具体的にプログラムを教えていただけると嬉しいです。

  • エクセルの質問です。

    エクセル2003を使用しています。 元データには   A   B(国語点数) C(算数点数) D(社会点数) E(理科点数 F(英語点) G(合計) 1 名前(1)   90        85        70       100      20    365 2 名前(2)   85        20        40       70       50    265    3 名前(3)   50        90        60       70       80    350 というデータを     A    B    C 1 名前(1)  国語  90 2        算数  85 3        社会  70 4        理科  100 5        英語  20 6        合計  365 7 名前(2)  国語  85 8        算数  20 9        社会  40 10       理科  70 11       英語  50 12       合計  265       ・       ・       ・ となるように表示していきたいのですが… ただのセルのコピーでは人が連続してコピーできませんでした。 何かいい方法があるかたはご教授ねがいます。 よろしくお願いします。   

  • よろしくお願いします。

    番号|名前|国語|算数 ----+----+----+---- 1 |佐藤|95 |85 2 |高橋|75 |95 3 |今井|68 |99 を 点数|番号|名前 ----+----+---- 68 |3 |今井 75 |2 |高橋 85 |1 |佐藤 95 |1 |佐藤 95 |2 |高橋 99 |3 |今井 と重複させ並べ替えて出力したいのですが・・ 初歩的な質問でごめんなさい。教えてください・・

専門家に質問してみよう