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 ...
随机推荐
- linux获取网络信息函数
获取IP地址 int sys_getIP(char *ip_addr) { ] = {"ifconfig eth0 | grep inet | cut -d: -f2 | cut -d' ' ...
- vue js判断长按触发及手指的上滑、下滑、左滑、又滑
<span class="btn" @touchstart="touchstart()" @touchmove="touchmove()&quo ...
- angular当router使用userhash:false时路由404问题
angular当router使用userhash:false时路由404问题 安装iis urlrewrite2.0组件 在根目录下创建 Web.config <configuration> ...
- [INS-06006] Passwordless SSH connectivity not set up between the following node(s)
解决方法1 参考:11.2.0.4 runInstaller: [INS-06006] Passwordless SSH connectivity not set up between the fol ...
- git二、基本使用
1:创建仓库 git init - 当前目录下初始化仓库,根目录产生.git文件-包含元数据文件,为其他git命令提供环境 2:克隆仓库 git clone url - 拷贝一个 Git 仓库到本 ...
- vim : 依赖: vim-common (= 2:7.3.429-2ubuntu2) 但是 2:7.3.429-2ubuntu2.1 正要被安装
sudo apt-get purge vim-common sudo apt-get update sudo apt-get upgrade sudo apt-get install vim Just ...
- 我所知道的JavaScript中判断数据类型
相信一提到怎么判断js的数据类型,大家都会想到的是typeof.instanceof,那么为什么有了typeof的存在还要有instanceof? typeof? 根据MDN:typeof操作符返回一 ...
- 在sql中case子句的两种形式
case子句,在select后面可以进行逻辑判断. 两种形式:判断相等.判断不等 一.判断相等的语法: case 列名 when ... then ... when ... then ... el ...
- cnetos7设置中文显示及中文输入法
Centos7安装的时候即使选择了中文安装,因为安装后并没有GUI,即使后来安装GUI后默认依旧是英文显示. 输入locale后显示的是 永久修改成中文:编辑/etc/profile.d/lang.s ...
- 编译原理---antlr实践+编译过程理解+课程理解知识点
0.其他说明 0.0编译器分为前.中.后端,课上主要学的是前端.前端又分为词法分析(lexical analysis).语法分析(syntax analysis).语义分析(semantic anal ...