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 ...
随机推荐
- Spark入门到精通--(第七节)环境搭建(服务器搭建)
Spark搭建集群比较繁琐,需要的内容比较多,这里主要从Centos.Hadoop.Hive.ZooKeeper.kafka的服务器环境搭建开始讲.其中Centos的搭建不具体说了,主要讲下集群的配置 ...
- oracle 表空间,用户的创建及授权,表空间基本操作
参考地址:https://www.cnblogs.com/zhaideyou/articles/5845271.html Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可 ...
- Java博客目录
JavaWeb 1.Tomcat使用 2.Servlet入门 3.JSP&EL&JSTL 4.Listener&Filter Java框架 Hibernate 1.简介及初使用 ...
- 关闭 synactive guixt. 在sap gui的右上角一个标志里,将 active guixt 选项去掉即可。
关闭 synactive guixt. 在sap gui的右上角一个标志里,将 active guixt 选项去掉即可.
- h5样式布局
在文字的左面加图标 background: url(../images/hi.png) left no-repeat; 如图所示
- 2018-2019 20175232 实验二《Java面向对象程序设计》实验报告
一.实验内容及步骤 1熟练掌握Junit和TDD: TDD(Test Driven Devlopment, 测试驱动开发)我们是该“先写产品代码,然后再写测试代码,通过测试发现了一些Bugs,修改代码 ...
- python虚拟环境迁移
python虚拟环境迁移: 注意事项:直接将虚拟环境复制到另一台机器,直接执行是会有问题的. 那么可以采用以下办法: 思路:将机器1虚拟环境下的包信息打包,之后到机器2上进行安装: (有两种情况要考虑 ...
- Go 初体验 - 并发与锁.2 - sync.WaitGroup
sync包里的WaitGroup主要用于协程同步 计数主协程创建的子线程 WaitGoup.Add(i) 调用清除标记方法WaitGroup.Done() 使用WaitGroup.Wait()来阻塞, ...
- python模块学习之hashlib模块学习
# 加密模块 import hashlib # md5 加密 md5 # 1.初始化md5模块 生成md5对象 # 2.引入要加密的数据 update # 3.获取加密值 hexdigest m = ...
- 【转】Windons+jenkins,构建java程序,提示C:\Windows\TEMP\jenkins5037773887088486383.bat Access is denied
坑1: !!!前提:已设置本机电脑的账号密码, 解决方法:搜索程序services.msc-- 找到Jenkins-- 右键“属性”--登录--此账户--输入本机的账号密码--保存-- 停止Jenki ...