1. 程式人生 > >C語言 Struct 結構體在 Java 中的體現

C語言 Struct 結構體在 Java 中的體現

修飾符 無法 輸入 更多 好用 ++ [] 的區別 import

  大一整個學期完成了 C 語言的學習,大二就進入了Java 的學習。

  和C語言一樣,我們都會嘗試寫一個小小的學生管理系統什麽的,學習過 C 語言同學知道,在管理系統中 Struct 結構體是個很好用的東西,使用它就避免了一些棘手的問題。

  那麽問題來了,在 Java 還有 Struct 結構體嘛?

  答案沒有的,不過 Java 中的 Class 對象體現的就是 Struct 結構體的思想。雖然 C 語言是一個面向過程化的語言,不過這個 Struct 結構體卻面向對象的味道,而 Java 做為面向對象的語言,要實現 Struct

   和定義結構體一樣,先定義一個 Class 對象,參考網上資料這裏以一個學生管理系統為例。


//定義學生實體類
class Student {
        private String Name;
        private double Score;
        public Student() {
            super();
        }

        public String getName() {
            return Name;
        }
        public void setName(String Name) {
            this.Name = Name;
        }

        
public double getScore() { return Score; } public void setScore(double Score) { this.Score = Score; } }

  這裏學生定義了姓名和分數兩個屬性,用 private 訪問權限修飾符吧,安全些,關於private、public、protected 的區別了解一下 https://blog.csdn.net/spu20134823091/article/details/53836192

  這個 super()\this 是什麽東西,個人理解像是自身調用自身的意思,詳解百度一下吧。 https://zhidao.baidu.com/question/14360400.html

  這個 Class Student 對象大概的意思應該是 setName() 、setScore() 字面意思可知負責從外面接收輸入並更新數據,這不有個 = 賦值操作符 ,同樣setName() 、setScore() 字面意思是外部進行調用時返回對應數據,於是有 return 語句。

  public String getName() 定義什麽類型就保持類型一致, get\set 直接連接定義的變量用,用於獲得\設置數值。

  此處暫時定義了兩個屬性,如果要添加更多的屬性就依照這樣的模式添加,一定註意類型要一致。

  如何使用呢,我想上一串代碼就可以get到了。

import java.util.Scanner;

//定義學生類實體
class Student {
        private String Name;
        private double Score;
        public Student() {
            super();
        }

        public String getName() {
            return Name;
        }
        public void setName(String Name) {
            this.Name = Name;
        }

        public double getScore() {
            return Score;
        }
        public void setScore(double Score) {
            this.Score = Score;
        }
}

public class Main {
    static Student[] Students = new Student[1000];
    public static void main(String [] args) {
        Scanner Input = new Scanner(System.in);
        System.out.println("請輸入學生數量:");
        int studentNumber = Input.nextInt();
        for(int i = 0; i < studentNumber; i++) {
            Students[i] = new Student();
            System.out.println("請輸入第" + (i+1) + "名學生的姓名");
            Students[i].setName(Input.next());
            System.out.println("請輸入第" + (i+1) + "名學生的成績");
            Students[i].setScore(Input.nextDouble());
        }
        System.out.println("最高分: ");
        System.out.println(" \t\t" + "姓名" + "\t\t" + "成績");
        System.out.println("\t\t" + Students[max(Students, studentNumber)].getName() + "\t\t" + Students[max(Students, studentNumber)].getScore() );
        System.out.println("成績排序: ");
        sort(Students, studentNumber);
        for(int i = 0; i < studentNumber; i++) {
            System.out.println("\t\t" + Students[i].getName() + "\t\t" + Students[i].getScore());
        }
    }

    //返回學生成績最高分對應學生下標
   static int max(Student[] Students, int n) {
        int flag = 0;
        double max = Students[0].getScore();
        for(int i = 1; i < n; i++) {
            if(Students[i].getScore() > max) {
                max = Students[i].getScore();
                flag = i;
            }
        }
        return flag;
    }

   //學生成績排序
    static void sort(Student[] Students, int n) {
        Student temp = new Student();
        for(int i = 0; i < n; i++) {
            for(int j = i+1; j < n; j++) {
                if(Students[i].getScore() > Students[j].getScore()) {
                    temp = Students[i];
                    Students[i] = Students[j];
                    Students[j] = temp;
                }
            }
        }
    }
}

  怎樣?和結構體差不多的用法吧,就是定義時有點繁瑣。

  這個只是個簡單的不健壯的程序,比如無法判斷數據輸入有效性、名稱不能有空格、最高分有多個時展示不全等等,後續可以加強。

  先記在此處,算是學習筆記吧。

C語言 Struct 結構體在 Java 中的體現