当前位置: 首页 > news >正文

3.21学习总结Java

类和对象

类和对象是什么

类:是对象共同特征的描述(设计图);

对象:是真实存在的具体东西。

在Java中,必须先设计类,才能获取对象;

如何得到对象

创造对象:类名 对象名=new 类名();

如何使用对象

访问属性:对象名.成员变量

访问行为:对象名.方法名(...)

定义类的补充注意事项

用来描述一类事物的类,专业叫做:Javabean类。

在javabean类中,是不写main方法的。

编写main方法的类,叫做测试类。

我们可以在测试类中创建JavaBean类的对象并进行赋值调用。

对象成员变量的默认值规则

整数默认初始化为0。

小数默认初始化为0.0。

boolean类型默认初始化为false。

引用类型默认初始化为null。

封装

对象代表什么,就得封装对应的数据,并提供数据对应的行为。

封装能告诉我们,如何正确设计对象的属性和方法。

让编程变得更简单,降低我们的学习成本。

private关键字

就近原则和this关键字

当成员变量和局部变量命名相同时,当前对象的引用遵循就近原则,即谁离我近就用谁。

this能区分成员变量和局部变量,可以通过this来访问当前对象的成员变量。

this的本质:代表方法调用者的地址值

构造方法

如果我们自己没有写任何的构造方法,那么虚拟机会给我们加一个空参构造方法。

如果定义了一个构造方法,系统将不再提供默认的构造方法。

创造对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化。

快捷键alt+insert生成javabeen

成员变量和局部变量的区别

next();接收字符串

遇到空格,制表符,回车就停止接受,这些符号之和的数据就不会再接受了。

nextLine();接收字符串

可以接收空格,制表符,遇到回车才停止接受数据

API和API帮助文档

API:应用程序编程接口

简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可

API帮助文档:帮助开发人员更好的使用和查询API的一个工具

写了几道题

观察可以得到,从n爬到n+1有一种方法,从一爬到n+2有一种方法,对于n+3及更大的数,爬到他们的方法数,等于与他相邻的两个比他小点的方法数之和。代码如下:

#include <stdio.h>
int a[1005][1005];
int n, m,length=1;
void yyc(int s)
{
	for (int i = 1; i <= length; i++) {
		a[s][i] = a[s - 1][i] + a[s - 2][i];
	}
	for (int i = 1; i <= length; i++) {
		if (a[s][i] > 9) {
			a[s][i+1] += a[s][i] / 10;
			a[s][i] %= 10;
			if (a[s][length+1]) {
				length++;
			}
		}
	}
}
int main()
{
	scanf("%d %d", &n, &m);
	a[n + 1][1] = 1;
	a[n + 2][1] = 2;
	for (int i = n + 3; i <= m; i++) {
		yyc(i);
	}
	for (int i = length; i >= 1; i--) {
		printf("%d", a[m][i]);
	}
	return 0;
}

刚开始我的想法是,对于每道菜都有吃与不吃两种情况,吃的话就花费这道菜的价钱,看下一道菜,不吃的话就直接看下一道菜,若花费金额等于m,方案数+1,则返回上一次的选择,若金额大于m或菜品看完了钱还没花完,则直接回到上一次的选择。代码如下

#include <stdio.h>
int n, m,num=0;
int a[105];
void yyc(int k, int s) 
{
	if (s == m) {
		num++;
		return;
	}
	if (s > m||k==n+1) {
		return;
	}
	yyc(k + 1, s + a[k]);
	yyc(k + 1, s);
	return;
}
int main()
{
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
	}
	yyc(1, 0);
	printf("%d", num);
}

结果不是很理想,时间超限了

后面看了题解,使用动态规划

定义f[i][j]为用前i道菜用光j元钱的办法总数,其状态转移方程如下:

(1)if(j==第i道菜的价格)f[i][j]=f[i-1][j]+1;

(2)if(j>第i道菜的价格) f[i][j]=f[i-1][j]+f[i-1][j-第i道菜的价格];

(3)if(j<第i道菜的价格) f[i][j]=f[i-1][j];

说的简单一些,这三个方程,每一个都是在吃与不吃之间抉择。若钱充足,办法总数就等于吃这道菜的办法数与不吃这道菜的办法数之和;若不充足,办法总数就只能承袭吃前i-1道菜的办法总数。依次递推,在最后,我们只要输出f[n][m]的值即可。

代码如下:

#include <stdio.h>
int n, m;
int a[105],f[105][10005];

int main()
{
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (a[i] > j) {
				f[i][j] = f[i - 1][j];
			}
			if (a[i] < j) {
				f[i][j] = f[i - 1][j] + f[i - 1][j - a[i]];
			}
			if (a[i] == j) {
				f[i][j] = f[i - 1][j] + 1;
			}
		}
	}
	printf("%d", f[n][m]);
}

相关文章:

  • 第27章:Ingress控制器实战:Nginx Ingress与Kong Gateway
  • 数据库系列之:Sqlserver 表开启cdc后,对应的ct表数据保存时间
  • Ligolo-ng 保姆级使用指南:新一代隧道代理工具(OSCP适用)
  • 天闻数媒名师工作室系统 fileTempDownload 存在文件读取漏洞(DVB-2025-8998)
  • 华为云Flexus L实例和X实例有啥区别?云服务器Flexus全解析
  • 105. 有向图的完全联通
  • LangChain 基础
  • 【AI News | 20250322】每日AI进展
  • C++进阶——类与对象
  • 基于物理信息强化学习的非线性系统最优控制
  • Java面试黄金宝典10
  • CSRF SSRF RCE
  • Django 生产环境静态文件处理
  • 代码随想录算法训练营第十四天(2)|151.翻转字符串里的单词
  • Python Cookbook-4.9 从字典中取值
  • 探索 Ollama:开源大语言模型平台的无限可能​
  • 《大话数据结构》学习记录----第三章线性表
  • SPI 机制与 Spring Boot AutoConfiguration 对比解析
  • 基于linux平台的C语言入门教程(7)类型转换
  • 计算机网络高频(二)TCP/IP基础
  • 国务院安委会办公室印发通知:坚决防范遏制重特大事故发生
  • 市场监管总局发布《城镇房屋租赁合同(示范文本)》
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 央视热评:从银幕到生活,好故事如何“撬动”大市场
  • 抗战回望16︱《青年生活》《革命青年》:抗战与青年
  • 电商平台集体出手,多措并举助力外贸企业拓内销