5.阅读下面的程序,回答问题。 interface Achievement { abstract float average( ); class Person { String name; int age; public Person(String newName,int newAge){ name=newName; age=newAge; public void introduce(){ System.out.println("你好,我是"+name+",今年"+age+"岁"); class Student extends Person implements Achievement ( int chinese, math, english; public Student(String newName, int newAge){ super(newName, newAge); public void setScore(int c, int m, int e){ chinese=c; math=m; english=e; public float average( ){ return (chinese+math+english)/3 public class Test2_5 { public static void main(String[ ] args){ Student s1=new Student("张三",16); s1.introduce( ); s1.setScore(92, 90,83); System.out.println("我的平均分是"+s1.average()); 回答问题:(1)程序中定义的接口、主类、父类、子类及接口的实现类?(2)程序中出现的构 造方法、抽象方法?(3)主方法中创建的对象及通过该对象调用的方法?
时间: 2024-01-05 14:04:26 浏览: 97
(1)程序中定义了一个接口 Achievement,主类为 Test2_5,父类为 Person,子类为 Student,Student 实现了 Achievement 接口。
(2)程序中出现了两个构造方法,一个是 Person 的构造方法,另一个是 Student 的构造方法。程序中定义了一个抽象方法 average()。
(3)主方法中创建了一个 Student 对象 s1,并通过 s1 调用了 introduce() 和 average() 方法。
相关问题
用C语言改一下#include<iostream> #include<cstring> #include<iomanip> using namespace std; struct student{ char name[20]; int num; //学号 int number; //票数 int Class; char major[30]; char grade[10]; char achievement[200]; }; class votesystem{ private: studentst; int count; //当前元素个数 int size; //哈希表长 public: void InitHashTable(int n); //初始化哈希表 int Hash(charname); //计算哈希地址 void collision(int &s); //冲突,计算下一个地址 int search(char name,int &s); //查找 void insert(charname); //插入 int vote(char*name); //投票 void display(); //显示哈希表 void showvote(int k); //按哈希表下标显示票数 void showrank(); //显示排行榜 };
使用C语言改写该代码如下:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME_LEN 20
#define MAX_MAJOR_LEN 30
#define MAX_GRADE_LEN 10
#define MAX_ACHIEVEMENT_LEN 200
#define HASH_TABLE_SIZE 100
typedef struct student {
char name[MAX_NAME_LEN];
int num; //学号
int number; //票数
int Class;
char major[MAX_MAJOR_LEN];
char grade[MAX_GRADE_LEN];
char achievement[MAX_ACHIEVEMENT_LEN];
} student;
typedef struct HashNode {
student st;
int flag; //标记该位置是否被占用
} HashNode;
typedef struct votesystem {
HashNode table[HASH_TABLE_SIZE];
int count; //当前元素个数
} votesystem;
void InitHashTable(votesystem *vs) {
vs->count = 0;
for (int i = 0; i < HASH_TABLE_SIZE; i++) {
vs->table[i].flag = 0;
}
}
int Hash(char *name) {
int hash_val = 0;
for (int i = 0; name[i] != '\0'; i++) {
hash_val = (hash_val * 31 + name[i]) % HASH_TABLE_SIZE;
}
return hash_val;
}
void collision(int *s) {
(*s)++;
if (*s == HASH_TABLE_SIZE) {
*s = 0;
}
}
int search(votesystem *vs, char *name, int *s) {
int hash_val = Hash(name);
while (vs->table[hash_val].flag != 0 && strcmp(vs->table[hash_val].st.name, name) != 0) {
collision(s);
hash_val = Hash(name) + *s;
}
if (vs->table[hash_val].flag == 0) {
return -1; //未找到该元素
} else {
return hash_val;
}
}
void insert(votesystem *vs, student st) {
if (vs->count == HASH_TABLE_SIZE) {
printf("Hash table is full!\n");
} else {
int s = 0;
int hash_val = Hash(st.name);
while (vs->table[hash_val].flag == 1) {
collision(&s);
hash_val = Hash(st.name) + s;
}
vs->table[hash_val].st = st;
vs->table[hash_val].flag = 1;
vs->count++;
}
}
int vote(votesystem *vs, char *name) {
int s = 0;
int hash_val = search(vs, name, &s);
if (hash_val == -1) {
printf("Student %s not found!\n", name);
return -1;
} else {
vs->table[hash_val].st.number++;
return vs->table[hash_val].st.number;
}
}
void display(votesystem *vs) {
for (int i = 0; i < HASH_TABLE_SIZE; i++) {
if (vs->table[i].flag == 1) {
printf("name: %s, num: %d, number: %d, Class: %d, major: %s, grade: %s, achievement: %s\n",
vs->table[i].st.name, vs->table[i].st.num, vs->table[i].st.number,
vs->table[i].st.Class, vs->table[i].st.major, vs->table[i].st.grade,
vs->table[i].st.achievement);
}
}
}
void showvote(votesystem *vs, int k) {
if (k >= 0 && k < HASH_TABLE_SIZE && vs->table[k].flag == 1) {
printf("name: %s, number: %d\n", vs->table[k].st.name, vs->table[k].st.number);
} else {
printf("Invalid index!\n");
}
}
void showrank(votesystem *vs) {
student *tmp_st = (student *) malloc(sizeof(student) * vs->count);
int tmp_count = 0;
for (int i = 0; i < HASH_TABLE_SIZE; i++) {
if (vs->table[i].flag == 1) {
tmp_st[tmp_count++] = vs->table[i].st;
}
}
for (int i = 0; i < tmp_count - 1; i++) {
for (int j = i + 1; j < tmp_count; j++) {
if (tmp_st[i].number < tmp_st[j].number) {
student tmp = tmp_st[i];
tmp_st[i] = tmp_st[j];
tmp_st[j] = tmp;
}
}
}
for (int i = 0; i < tmp_count; i++) {
printf("%d. name: %s, number: %d\n", i + 1, tmp_st[i].name, tmp_st[i].number);
}
free(tmp_st);
}
int main() {
votesystem vs;
InitHashTable(&vs);
student st1 = {"Tom", 1001, 0, 1, "Computer Science", "Grade 1", "Excellent"};
student st2 = {"Jerry", 1002, 0, 1, "Computer Science", "Grade 1", "Good"};
student st3 = {"Bob", 1003, 0, 1, "Computer Science", "Grade 1", "Average"};
insert(&vs, st1);
insert(&vs, st2);
insert(&vs, st3);
vote(&vs, "Tom");
vote(&vs, "Jerry");
vote(&vs, "Tom");
vote(&vs, "Tom");
display(&vs);
showvote(&vs, Hash("Tom"));
showrank(&vs);
return 0;
}
```
解释public class Example : MonoBehaviour { private Achievement achievement; private void Start() { // 创建成就实例并注册到成就管理器 achievement = new Achievement("001", "Collect 10 items", "Collect 10 items in the game"); AchievementManager.Instance.RegisterAchievement(achievement); } private void Update() { // 检查条件是否满足解锁成就 if (condition) { achievement.Unlock(); } } }
这段代码展示了一个名为 `Example` 的`MonoBehaviour`类,它用于演示如何在Unity中实现成就系统。
在该示例中:
- `private Achievement achievement;`:声明了一个私有的 `Achievement` 变量,用于存储成就对象。
- `private void Start()`:在游戏开始时调用的方法。在这个方法中,创建了一个成就实例,并将其注册到成就管理器中。具体来说,通过使用`new`关键字创建了一个具有标识符("001")、名称("Collect 10 items")和描述("Collect 10 items in the game")的成就对象,然后调用 `AchievementManager.Instance.RegisterAchievement(achievement)` 将成就对象注册到成就管理器中。
- `private void Update()`:在每一帧更新时调用的方法。在这个方法中,通过检查特定条件是否满足来尝试解锁成就。具体来说,在示例中使用了一个条件语句 `if (condition)`,你需要将 `condition` 替换为你自己的条件,例如玩家收集了足够的物品。如果条件满足,则调用 `achievement.Unlock()` 方法来解锁成就。
这段代码展示了如何在游戏开始时注册成就并在满足条件时解锁成就。你可以根据实际需要对代码进行修改和扩展,以适应你的游戏逻辑和成就系统设计。
阅读全文