promotion image of download ymail app
Promoted

急問一個JAVA程式的問題

請幫每一位學生增加出勤點名資料,點名資料為 Boolean 值,每次上課點名一次,一學期共有18次點名記錄。因為考慮到學生的意外情形,一學期中每位學生最多可以有 1 次缺席不列入統計。備註:為方便起見,請使用隨機函數幫學生設定每次的點名資料,學生應有70%的機會會被設為出席狀態。

請將學生人數增加到 20 人,學期總出勤排名前 20% 者,加分 10%;排名 20% 以後,50% 以前者,加分 5%;排名 50% 以後,85% 以前者,不加分也不扣分,餘者扣分 5%。

輸出範例:

初始資料:

學生1: 王 先生 學號:0000001;

各科成績:64, 72, 80 平均成績:72.00

公開金鑰(17399, 19),私密金鑰(17399, 9019)

點名資料[0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]

學生2: 李 小姐 學號:0000002;

各科成績:81, 85, 80 平均成績:82.00

公開金鑰(23393, 107),私密金鑰(23393, 12515)

點名資料[1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0]

……[共 20 筆]

按點名加減分後資料:

學生1: 王 先生 學號:0000001;

各科成績:64, 72, 80 平均成績:72.00

公開金鑰(17399, 19),私密金鑰(17399, 9019)

點名資料[0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]

總共出席11次,班上出勤排名:25%,加分 5%

加分後成績:75.60

學生2: 李 小姐 學號:0000002;

各科成績:81, 85, 80 平均成績:82.00

公開金鑰(23393, 107),私密金鑰(23393, 12515)

點名資料[1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0]

總共出席12次,班上出勤排名:18%,加分 10%

加分後成績:90.20

……[共 20 筆]

1 Answer

Rating
  • 9 years ago
    Favorite Answer

    請參考我的做法

    import java.util.*;

    class Pupil implements Comparable<Pupil> {

    String name;

    int id, s1, s2, s3, pre, pRank;

    int pubK1, pubK2, priK1, priK2;

    boolean[] pres = new boolean[18];

    int[] pre2 = new int[pres.length];

    boolean sortByID = false;

    Pupil(String name, int id) {

    this.name = name;

    this.id = id;

    for (int i = 0; i < pres.length; i++) {

    pres[i] = (Math.random() > 0.3) ? true : false;

    if (pres[i]) {

    pre2[i] = 1;

    pre++;

    } else

    pre2[i] = 0;

    }

    }

    double avg() {

    return (int)((s1 + s2 + s3) * 100 / 3.0D) / 100D;

    }

    public String toString() {

    return "學生:" + name + "\t學號:000000" + id +

    "\n各科成績:" + s1 + ", " + s2 + ", " + s3 + "\t平均成績:" + avg() +

    "\n公開金鑰(" + pubK1 + ", " + pubK2 + ") 私密金鑰(" + priK1 + ", " + priK2 + ")" +

    "\n點名資料" + Arrays.toString(pre2);

    }

    public int compareTo(Pupil o) {

    if (sortByID) return id - o.id;

    return o.pre - pre;

    }

    }

    public class Y1299 {

    public static void main(String[] args) {

    Pupil[] ps = new Pupil[20];

    for (int i = 0; i < ps.length; i++) {

    Pupil p = new Pupil(i + "先生", i);

    p.s1 = (int)(Math.random() * 100);

    p.s2 = (int)(Math.random() * 100);

    p.s3 = (int)(Math.random() * 100);

    System.out.println(p);

    ps[i] = p;

    }

    Arrays.sort(ps);

    for (int i = 0; i < ps.length; i++) {

    ps[i].pRank = i * 100 / ps.length;

    ps[i].sortByID = true;

    }

    Arrays.sort(ps);

    for (Pupil p : ps) {

    System.out.println(p);

    System.out.print("總共出席" + p.pre + "次,班上出勤排名:" + p.pRank + "%");

    if (p.pRank <= 20) {

    System.out.println(",加分 10%");

    System.out.println("加分後成績:" + p.avg() * 1.10D);

    } else if (p.pRank <= 50) {

    System.out.println(",加分 5%");

    System.out.println("加分後成績:" + p.avg() * 1.05D);

    } else if (p.pRank > 85) {

    System.out.println(",扣分 5%");

    System.out.println("扣分後成績:" + p.avg() * 0.95D);

    } else System.out.println();

    }

    System.out.println("......[共" + ps.length + "茟]");

    }

    }

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.