C语言 Struct 结构体在 Java 中的体现
大一整个学期完成了 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 中的体现的更多相关文章
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- C#语言struct结构体适用场景和注意事项
在C#语言中struct结构体和class之间的区别主要是值类型和引用类型的区别,但实际上如果使用不当是非常要命的.从Win32时代过来的人对于struct一点不感觉陌生,但是却反而忽略了一些基本问题 ...
- 如何让c语言使用结构体近似模拟c++中的类
如今统治市场的主流编程语言,如c++,java,大都是面向对象类型的编程语言. 而众所周知,c语言是面向过程的编程语言,但是它拥有一个类似于类的结构,叫做结构体,主要的区别在于结构体无法定义函数. 因 ...
- ios开发中的C语言学习—— 结构体简介
在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- C语言结构体在内存中的存储情况探究------内存对齐
条件(先看一下各个基本类型都占几个字节): void size_(){ printf("char类型:%d\n", sizeof(char)); printf("int类 ...
- struct结构体在c和c++中的差别
非常多次遇到这个struct的问题,今天在这里简单总结一下我的理解 一.struct在C 中的使用 1.单独使用struct定义结构体类型 struct Student { int id; int n ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
随机推荐
- 【Git】修改git远程连接ip
- [LeetCode] 115. Distinct Subsequences_ Hard tag: Dynamic Programming
Given a string S and a string T, count the number of distinct subsequences of S which equals T. A su ...
- 两种库解析、构造 JSON
1.用CJSON库 1.1解析Json 需要解析的JSON文件: { "name":"Tsybius", , "sex_is_male":t ...
- python项目推荐(转载知乎)
作者:Wayne Shi链接:https://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- 感觉不错的随笔 关于C、C++的
[effective C++的网页版] http://www.kuqin.com/effectivec2e/ 内存四区模型 https://www.cnblogs.com/crazyzhang/p/5 ...
- C++ cout格式化输出
表1:C++ 流操纵算子 流操纵算子 作 用 *dec 以十进制形式输出整数 常用 hex 以十六进制形式输出整数 oct 以八进制形式输出整数 fixed 以普通小数形式输出浮点数 scienti ...
- 2018 CCPC网络赛 几道数学题
1002 Congruence equation 题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=6439 题解 : https://www.zyb ...
- SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...
- 堆叠式降噪自动编码器(SDA)
1.1 自动编码器 自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效 ...
- 高校表白APP-冲刺第一天
今天我们开了第一次会议, 一.任务: 今日任务布局登录页面,注册页面,修改密码界面 明日任务完成基本的登录页面框架 二.遇到的困难: 布局文件里的一些标签,用法不清楚,页面跳转都得学习.