第六周周记
java:
面向对象程序设计特点:
封装,集成,多态
异常:
1 无意义异常
2 错误传递
3 数组异常
4 访问空指针对象成员
5 找不到某个类
6 I/O异常
7 文件找不到
8 文件结束
9 线程异常
处理异常:
方式(1)
try:要监控的程序语句
final:释放调用的资源
catch:捕获处理异常(可以有多个catch)
(2)throw:手动引发异常
(3)throws:指定由方法引发的异常
用户自定义异常:
内置异常不一定能捕获程序中所有的错误,
C++:
回顾:
类的创建:
(1)栈中创建
(2)堆中创建
this指针指向对象
构造函数:
构造函数不需要返回值类型
权限控制符一般为public
构造函数可以重载(函数名可以相同,函数的参数的个数或者类型不同)
含有类成员对象的构造函数?
析构函数:(也是类的一个特殊成员变量)
栈中创建的,函数返回时会被回收
手动开辟的成员(new)变量需要手动回收(delete)。
(1)函数名称和类名相同,析构函数前加取反~符号
(2)函数没有参数,因此不能重载,一个类中只有一个析构函数
(3)没有返回值(不能在析构函数名称前加返回值类型,内部也不能通过return返回任何值)
析构函数的作用:
在堆上的成员变量进行手动回收
拷贝构造函数:
对对象加const:只读(不能进行修改)
浅拷贝
深拷贝
数据结构:
队列:
两个问题:用C语言解决
(1)约瑟夫环
#include <stdio.h>
int size = 20;
int queue[20];
int front = 0, rear = 0;
// 向队列中添加元素
void enQueue(int e)
{
if ((rear + 1) % size == front)
{
printf("Queue is full.\n");
return;
}
queue[rear] = e;
rear = (rear + 1) % size;
}
// 从队列中删除元素
int deQueue() {
if (front == rear) {
printf("Queue is empty.\n");
return 0;
}
int e = queue[front];
front = (front + 1) % size;
return e;
}
// 约瑟夫环问题
int josephus(int n, int m)
{
// 初始化队列
for (int i = 1; i <= n; i++)
{
enQueue(i);
}
int count = 0;
while (front != rear - 1)
{ // 只剩一个人时结束循环
count++;
int current = deQueue();
if (count % m != 0)
{
enQueue(current); // 不是第 m 个出队的人,重新入队
}
}
return deQueue(); // 返回最后一个出队的人
}
int main() {
int n = 2, m = 3;
int result = josephus(n, m);
printf("The last person is %d.\n", result);//最后一个数字是哪个
return 0;
}
(2)括号匹配问题
#include <stdio.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 100
// 定义一个字符类型的栈
char stack[MAX_STACK_SIZE];
int top = -1;
// 入栈操作
void push(char c) {
stack[++top] = c;
}
// 出栈操作
char pop() {
return stack[top--];
}
// 判断括号是否匹配的函数
bool is_expression_valid(char* expression) {
for (int i = 0; expression[i] != '\0'; i++) {
if (expression[i] == '(' || expression[i] == '[' || expression[i] == '{') {
push(expression[i]); // 如果是左括号,入栈
}
else if (expression[i] == ')' || expression[i] == ']' || expression[i] == '}') {
if (top == -1) { // 如果栈为空,说明缺少左括号,配对失败
return false;
}
else {
char left = pop(); // 弹出栈顶元素
if ( (expression[i] == ')' && left != '(' ) || (expression[i] == ']' && left != '[') || (expression[i] == '}' && left != '{')) {
return false; // 如果弹出的左括号与当前右括号不匹配,配对失败
}
}
}
}
return top == -1; // 如果栈为空,说明括号全部配对成功,否则说明缺少右括号,配对失败
}
// 主函数
int main() {
char expression[MAX_STACK_SIZE]; // 定义 char 类型数组作为存储表达式的字符串
printf("Please input an expression: ");
fgets(expression, MAX_STACK_SIZE, stdin); // 从标准输入流中读取表达式字符串
expression[strlen(expression) - 1] = '\0'; // 将读入的字符串最后一个字符改为 '\0',相当于去掉了换行符
if (is_expression_valid(expression)) { // 如果括号配对成功,输出 “Valid expression.”
printf("Valid expression.\n");
}
else { // 如果括号配对不成功,输出 “Invalid expression.”
printf("Invalid expression.\n");
}
return 0; // 返回程序正常结束
}
网页设计:
行内样式:
内嵌样式:
链接样式:
将一个/多个CSS为拓展名的CSS样式文件链接到html某一html文件中。
使用link标记一引入外部样式表文件
(创建CSS文件----也放在目录文件夹下):html文件,CSS文件,图片文件夹,JS文件,这些都放在目录文件夹下。
导入样式:一般不用
引入外部CSS样式文件
在style标签开头使用 @import语句
基本选择器
(1)id选择器:
(2)通配符选择器:
(3)类选择器:
交集选择器:由两个选择器构成,第一个为标记选择器,第二个为类选择器/id选择器,将选中满足两者定义的选择器
并集选择器:可以是多个选择器通过逗号隔开连接而成,将选中各个选择器所选范围
样式书写和命名规范:
CSS设置文本样式和图像样式:
(1)字体:
(2)字号:font-size
(3)文字粗细:font-weight
(4)文字复合样式
设置有先后顺序
html的注释:
CSS的注释:/* */