fork(1) download
  1. /*
  2.   No.9
  3.  
  4.   最終課題
  5.   これまで学んできたことをもとにして、以下の応用課題を作成してください。
  6. */
  7.  
  8. import java.io.IOException;
  9. import java.io.FileInputStream;
  10. import java.io.BufferedReader;
  11. import java.io.InputStreamReader;
  12. import java.util.Arrays;
  13. import java.util.Comparator;
  14.  
  15. public class Program {
  16.  
  17. /*
  18.   1)新たに gakusei クラスを作成してください。
  19. */
  20. public static class gakusei {
  21. /*
  22.   メンバーは、
  23.   private String bangou; //学生番号
  24.   private String namae; //氏名
  25.   private int eigo; //英語の得点
  26.   private int kokugo; //国語の得点
  27.   private int suugaku; //数学の得点
  28.   private int goukei; //3科目の合計点
  29.   とします。
  30.   */
  31.  
  32. private String bangou; //学生番号
  33. private String namae; //氏名
  34. private int eigo; //英語の得点
  35. private int kokugo; //国語の得点
  36. private int suugaku; //数学の得点
  37. private int goukei; //3科目の合計点
  38.  
  39. // 2)引数のないコンストラクタを作成します。処理は特にしません。
  40.  
  41. public gakusei(){}
  42.  
  43. /*
  44.   3)学生番号、氏名、英語の得点、国語の得点、数学の得点を引数とするコンストラクタを作成しま
  45.   す。コンストラクタ内では、受け取った英語の得点、国語の得点、数学の得点の合計を計算し、
  46.   値を goukeiにセットします。
  47.   */
  48. public gakusei( String abangou, String anamae,
  49. int aeigo, int akokugo, int asuugaku )
  50. {
  51. bangou = abangou;
  52. namae = anamae;
  53. eigo = aeigo;
  54. kokugo = akokugo;
  55. suugaku = asuugaku;
  56.  
  57. goukei = eigo + kokugo + suugaku;
  58. }
  59. /*
  60.   4)メンバーの内容を表示するメソッド showSeiseki()を以下の内容で作成してください。
  61.   表示の方法は実行結果を参考にし、各項目を揃えるようにしてください。
  62.  
  63.   public void showSeiseki() {
  64.  
  65.   int moji; // 氏名の文字数
  66.   System.out.print(bangou + " ");
  67.   moji = namae.length();
  68.   moji --; // 間の空白分を文字数から減らす
  69.   System.out.print(namae);
  70.  
  71.   // 氏名の文字数による間隔の調整
  72.   for(int i = 0;i<= 6-namae.length();i++) {
  73.   System.out.print(" ");
  74.   }
  75.   // 英語の得点表示
  76.   // 国語の得点表示
  77.   // 数学の得点表示
  78.   // 合計得点表示
  79.   }
  80.   */
  81.  
  82. public void showSeiseki() {
  83. int moji;
  84. System.out.print(bangou + " ");
  85. // 意図不明
  86. moji = namae.length();
  87. moji --; // 間の空白分を文字数から減らす
  88. System.out.print(namae);
  89.  
  90. // 氏名の文字数による間隔の調整
  91. for(int i = 0;i <= 6 - namae.length();i++) {
  92. System.out.print(" ");
  93. }
  94.  
  95. // 英語の得点表示
  96. if(eigo<100){ System.out.print(" "); }
  97. if(eigo<10) { System.out.print(" "); }
  98. System.out.print(eigo);
  99. System.out.print(" ");
  100.  
  101. // 国語の得点表示
  102. if(kokugo<100){ System.out.print(" "); }
  103. if(kokugo<10) { System.out.print(" "); }
  104. System.out.print(kokugo);
  105. System.out.print(" ");
  106.  
  107. // 数学の得点表示
  108. if(suugaku<100){ System.out.print(" "); }
  109. if(suugaku<10) { System.out.print(" "); }
  110. System.out.print(suugaku);
  111. System.out.print(" ");
  112.  
  113. // 合計得点表示
  114. if(goukei<100){ System.out.print(" "); }
  115. if(goukei<10) { System.out.print(" "); }
  116. System.out.println(goukei);
  117. }
  118. // 5)goukeiの値を返すメソッド getGoukei()を作成してください。
  119. public int getGoukei(){
  120. return goukei;
  121. }
  122. }
  123.  
  124. public static void main( String arg[] ){
  125. // ここからは、kadai0903 を作成していきます。
  126. /* 6)gakusei型の配列 g_tblを、
  127.  
  128.   gakusei g_tbl[] = new gakusei[200];
  129.   と宣言しておきます。
  130.   また、見出しを、
  131.   String kamoku = "番号 学生氏名 英語 国語 数学 合計";
  132.   と宣言しておきます。
  133.   */
  134. gakusei g_tbl[] = new gakusei[200];
  135. String kamoku = "番号 学生氏名 英語 国語 数学 合計";
  136.  
  137. /*
  138.   7)以下のように変数を宣言します。
  139.   String ban; // 切り出した学生番号をセット
  140.   String sei; // 切り出した姓をセット
  141.   String mei; // 切り出した名をセット
  142.   String ei; // 切り出した英語の得点をセット
  143.   String koku; // 切り出した国語の得点をセット
  144.   String suu; // 切り出した数学の得点をセット
  145.   String name; // 姓と名を半角の空白を挟んでセット
  146.  
  147.   int t_eigo; // 整数化した英語の得点をセット
  148.   int t_kokugo; // 整数化した国語の得点をセット
  149.   int t_suugaku; // 整数化した数学の得点をセット
  150.  
  151.   int g_eigo=0; // 英語の合計
  152.   int g_kokugo=0; // 国語の合計
  153.   int g_suugaku=0; // 数学の合計
  154.   int g_goukei=0; // 総合計
  155.  
  156.   double h_eigo; // 英語の平均点
  157.   double h_kokugo; // 国語の平均点
  158.   double h_suugaku; // 数学の平均点
  159.   double h_goukei; // 合計の平均点
  160.  
  161.   int max_eigo; // 英語の最高点
  162.   int min_eigo; // 英語の最低点
  163.   int max_kokugo; // 国語の最高点
  164.   int min_kokugo; // 国語の最低点
  165.   int max_suugaku; // 数学の最高点
  166.   int min_suugaku; // 数学の最低点
  167.   int max_goukei; // 合計の最高点
  168.   int min_goukei; // 合計の最低点
  169.   int nin = 0; // 読み込んだデータ数
  170.  
  171.   // 配列の並べ替えの際に使用する
  172.   gakusei work = new gakusei();
  173.  
  174.   その他の必要な変数は各自で宣言してください。
  175.   */
  176.  
  177. String ban; // 切り出した学生番号をセット
  178. String sei; // 切り出した姓をセット
  179. String mei; // 切り出した名をセット
  180. String ei; // 切り出した英語の得点をセット
  181. String koku; // 切り出した国語の得点をセット
  182. String suu; // 切り出した数学の得点をセット
  183. String name; // 姓と名を半角の空白を挟んでセット
  184.  
  185. int t_eigo; // 整数化した英語の得点をセット
  186. int t_kokugo; // 整数化した国語の得点をセット
  187. int t_suugaku; // 整数化した数学の得点をセット
  188.  
  189. int g_eigo=0; // 英語の合計
  190. int g_kokugo=0; // 国語の合計
  191. int g_suugaku=0; // 数学の合計
  192. int g_goukei=0; // 総合計
  193.  
  194. double h_eigo; // 英語の平均点
  195. double h_kokugo; // 国語の平均点
  196. double h_suugaku; // 数学の平均点
  197. double h_goukei; // 合計の平均点
  198.  
  199. int max_eigo = 0; // 英語の最高点
  200. int min_eigo = 100; // 英語の最低点
  201. int max_kokugo = 0; // 国語の最高点
  202. int min_kokugo = 100; // 国語の最低点
  203. int max_suugaku = 0; // 数学の最高点
  204. int min_suugaku = 100; // 数学の最低点
  205. int max_goukei = 0; // 合計の最高点
  206. int min_goukei = 300; // 合計の最低点
  207. int nin = 0; // 読み込んだデータ数
  208.  
  209. // 配列の並べ替えの際に使用する
  210. /* 意図不明のためnew削除 */
  211. gakusei work; // = new gakusei();
  212.  
  213. // 8)seiseki.txt ファイルを1行読み込みます。
  214.  
  215. try {
  216. fis = new FileInputStream("seiseki.txt");
  217. isr = new InputStreamReader(fis,"UTF-8");
  218. br = new BufferedReader(isr);
  219. } catch ( IOException e ){
  220. e.printStackTrace();
  221. return;
  222. }
  223.  
  224. /* ファイルは、
  225.  
  226.   J09001,阿久津,恵,79,56,67
  227.   J09002,荒,里美,66,45,86
  228.   J09003,新井,佳枝,63,58,92
  229.   J09004,飯野,良子,67,72,62
  230.   J09005,池田,愛美,100,81,76
  231.   J09006,石井,康代,67,55,92
  232.   J09007,石倉,真樹,90,79,82
  233.   J09008,石坂,奈緒子,92,85,70
  234.  
  235.   のように、学生番号、姓、名、英語の得点、国語の得点、数学の得点がカンマで区切られています。
  236.   */
  237. String line = null;
  238.  
  239. try{ line = br.readLine(); }
  240. catch (IOException e){
  241. e.printStackTrace();
  242. return;
  243. }
  244.  
  245. // ------ 13)while文を用いて、上記8)~12)までを繰り返します。
  246.  
  247. // 8)seiseki.txt ファイルを1行読み込みます。
  248. while( line != null ){
  249.  
  250. // 9)それぞれの項目を切り出します。
  251. String[] v = line.split(",");
  252. ban = v[0];
  253. sei = v[1];
  254. mei = v[2];
  255. ei = v[3];
  256. koku = v[4];
  257. suu = v[5];
  258.  
  259. // 10)Strng 型の変数 name を宣言し、切り出した姓と名を半角の空白を挟んで代入します。
  260. name = sei + " " + mei;
  261.  
  262. // 11)3科目の得点をそれぞれ整数に変換します。
  263. t_eigo = Integer.parseInt(ei);
  264. t_kokugo = Integer.parseInt(koku);
  265. t_suugaku = Integer.parseInt(suu);
  266. // 12)引数のあるコンストラクタを用いて、配列 g_tblに gakusei オブジェクトを生成します。
  267. g_tbl[nin] = new gakusei(ban,name,t_eigo,t_kokugo,t_suugaku);
  268.  
  269. /***** 16)科目ごとの最高点、最低点、平均点 */
  270. if( max_eigo < t_eigo ){
  271. max_eigo = t_eigo;
  272. }
  273. if( max_kokugo < t_kokugo ){
  274. max_kokugo = t_kokugo;
  275. }
  276. if( max_suugaku < t_suugaku ){
  277. max_suugaku = t_suugaku;
  278. }
  279. if( max_goukei < g_tbl[nin].getGoukei() ){
  280. max_goukei = g_tbl[nin].getGoukei();
  281. }
  282. if( min_eigo > t_eigo ){
  283. min_eigo = t_eigo;
  284. }
  285. if( min_kokugo > t_kokugo ){
  286. min_kokugo = t_kokugo;
  287. }
  288. if( min_suugaku > t_suugaku ){
  289. min_suugaku = t_suugaku;
  290. }
  291. if( min_goukei > g_tbl[nin].getGoukei() ){
  292. min_goukei = g_tbl[nin].getGoukei();
  293. }
  294.  
  295. g_eigo += t_eigo;
  296. g_kokugo += t_kokugo;
  297. g_suugaku += t_suugaku;
  298. g_goukei += g_tbl[nin].getGoukei();
  299.  
  300.  
  301.  
  302. // 上記8)~12)までを繰り返します。
  303. nin++;
  304. try{ line = br.readLine(); }
  305. catch (IOException e){
  306. e.printStackTrace();
  307. return;
  308. }
  309.  
  310. }
  311. // ----- 13)while文を用いて、上記8)~12)までを繰り返します。
  312.  
  313. try {
  314. br.close();
  315. isr.close();
  316. fis.close();
  317. } catch ( IOException e ){
  318. e.printStackTrace();
  319. return;
  320. }
  321.  
  322. // 14)配列の内容を goukei 点の高い順に並べ替えを行います。
  323. for( int i = 0; i < ( nin - 1 ); i++ ){
  324. for( int j = 0; j < ( nin - 1 - i ); j++ ){
  325. if( g_tbl[j].getGoukei() < g_tbl[j+1].getGoukei() ){
  326. work = g_tbl[j];
  327. g_tbl[j] = g_tbl[j+1];
  328. g_tbl[j+1] = work;
  329. }
  330. }
  331. }
  332.  
  333. // 15)並べ替えた結果をメソッド showMeibo()を用いて表示します。
  334. showMeibo(kamoku,g_tbl,nin);
  335.  
  336.  
  337. // 16)科目ごとの最高点、最低点、平均点を表示します。
  338.  
  339.  
  340. h_eigo = ( (double)g_eigo / nin );
  341. h_kokugo = ( (double)g_kokugo / nin );
  342. h_suugaku = ( (double)g_suugaku / nin );
  343. h_goukei = ( (double)g_goukei / nin );
  344.  
  345. System.out.println("-------------------------------------------------");
  346.  
  347. System.out.println(
  348. String.format("英語 最高点:%3d 最低点:%3d 平均点:%18.14f",
  349. max_eigo,min_eigo,h_eigo)
  350. );
  351. System.out.println(
  352. String.format("国語 最高点:%3d 最低点:%3d 平均点:%18.14f",
  353. max_kokugo,min_kokugo,h_kokugo)
  354. );
  355. System.out.println(
  356. String.format("数学 最高点:%3d 最低点:%3d 平均点:%18.14f",
  357. max_suugaku,min_suugaku,h_suugaku)
  358. );
  359. System.out.println(
  360. String.format("合計 最高点:%3d 最低点:%3d 平均点:%18.14f",
  361. max_goukei,min_goukei,h_goukei)
  362. );
  363. }
  364.  
  365. static public void showMeibo( String kamoku, gakusei[] gaku, int nin ){
  366. System.out.println(kamoku);
  367. for( int i = 0; i < nin; i++ ){
  368. gaku[i].showSeiseki();
  369. }
  370. }
  371. }
  372.  
  373. /*
  374.   実行結果
  375.   番号 学生氏名 英語 国語 数学 合計
  376.   J09064 斉藤 和子 93 96 96 285
  377.   J09137 福本 真紀 99 90 95 284
  378.   J09077 菅原 優子 96 100 86 282
  379.   J09013 市川 亜希 96 78 98 272
  380.   J09105 津坂 明子 69 49 48 166
  381.   J09158 矢作 美保 58 47 59 164
  382.   J09100 千葉 香奈子 67 33 62 162
  383.   J09086 大工原 亜香利 79 19 63 161
  384.   J09045 九鬼 麻美 48 48 58 154
  385.   J09082 関戸 美和 40 50 58 148
  386.   J09014 伊藤 菜穂子 48 51 48 147
  387.  
  388.  
  389.  
  390.   -------------------------------------------------
  391.   英語 最高点: 99 最低点: 23 平均点: 73.48235294117647
  392.   国語 最高点:100 最低点: 19 平均点: 71.45882352941176
  393.   数学 最高点:100 最低点: 38 平均点: 72.05294117647058
  394.   合計 最高点:285 最低点:147 平均点:216.99411764705883
  395. */
  396.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:15: class Program is public, should be declared in a file named Program.java
public class Program {
       ^
1 error
stdout
Standard output is empty