7/2~7/4学习成果总结

这几天初步的了解了一下Java,然后写了几道题:

下面总结一下学Java的时候遇到的一易错的小问题以及总结:

1. java里面只能在一个源文件里有一个public类,但是入口main那个可以理解为public static是一个整体也就是不属于public;(其实看到后面才知道main属于方法,不是类)
2. jdk9才有的交互jshell;  (这是遗憾没有试过,但是书上看到的知识)
3. 类型的分类:基本类型和引用类型(引用类型和指针有点像);

4. 在cmd里面执行Java代码的时候要在该Java代码的路径下,如果没有在可以用绝对路径,可以设置环境变量CLASSPATH,但是如果在环境变量里面没有当前路径要记得设置,否则可能会找不到,如果设置了CLASSPATH会严格按照它的路径来找,可以省略-d选项生成字节码,即默认为在当前目录下保存。
总结为: -classpath > CLASSPATH > -d(虽然现在基本上用到的是IDE工具,但是还是了解一下底层一点的知识)


5. 想知道如何解决文档乱码问题;用text文件创建(这个是我现在都还没查到的,但是先不打算深究,主要是现在开始初学);同时这里总结一下在ideal里面刚开始是不可以用打印函数打印中文的,这里说一下解决方法;

刚开始创建一个项目并且一个类的时候敲代码的页面右下角有这样一个,把那个UFT-8改成GBK,之后它会有一个提示是然后按那个convert按键就可以了,然后你会发现没有报错了;

6. 在java里面,一个语句可以跨多行和c语言有区别,而变量名和字符串不可以;


7. IDE 的原理:IDE工具有很多,原理也是我很想弄明白的,大概就是在操作者每创建一个类,都会出现相应class文件而且在该文件中只能有一个public类,并且这个类型的名称要和文件名一样,否则就会报错,除非你不用public;


8.标识符和c语言的区别:C语言是以字母数字下划线,且不可以用数字开头;Java是以字母下划线美元符开头,不可以以数字开头,总的来说就是Java多了一个美元符,其他没什么区别,Java的字母不限于26个字母可以是中文或者日文字符等,而c语言就是26个字母;但不可以是@等其他字符;直接量保留字和关键字都不可以作为标识符,var可作为标识符;


9. java 9开始不允许只用下划线作为标识符;


10. 在一个超出int类型的数不会自动转换成long而是要在最后1个L或者l;由于java在int类型里面的数是三十二位的,如果有一个数它超过了三十二位则会溢出变成负数,这时如果把它1加一个L的话,他就不会溢出啦!!举个栗子:

 long n1=0b10000000000000000000000000000001L;

结果:2147483649

  long n1=0b10000000000000000000000000000001;

结果:-2147483647

而且,在Java 里面如果把第一个结果用这样的形式long n1=2147483649;还会报错;因为这已经超出了int的范围,要想将它转换成long型;


11. 负数在计算机里面是以补码形式存在的,反码和原码还有补码的关系:对源码逐位取反,除了符号位,补码=反码加1;



13.如果用long 定义一个变量是自动转换,如long a=100;这里其实100在系统认为是int型,但是这时候就会自动转换成long型;
(如何看API帮助文档;)

14.初始化的时候,字符串可以··加减,也就是连起来;


15.只有浮点类型的数才有科学计数法,和c语言一样,默认的浮点数都是双精度JAVA提供了三个浮点数值,正无穷大,负无穷大,和非数。NaN和其他数都不相等,自己也是;如果是整数除以零会报错,浮点数就不会;

public class Test
{public static void main(String[]args){//String s1="abcdef";//String s2="abcdef"+"xy";//也可作字符串的连接运算符//System.out.println(s2);//System.out.println(s1);//float af=5.2345556f;//System.out.println(af);double a=0.0;double c=Double.NEGATIVE_INFINITY;//负无穷直接量float d=Float.POSITIVE_INFINITY;//正无穷System.out.println(c==d);//表示正无穷和负无穷不等System.out.println(a/a);//得到非数System.out.println(a/a==Float.NaN);非数和他本身都不想等System.out.println(6.0/0==555.0/0);//正无穷和正无穷相等System.out.println(-8/a);//数值是用下划线分割int bival=0b0000_1;System.out.println(bival);boolean  aaaa=true;String ssss=aaaa+"";System.out.println(ssss);//java 10;才有// var a=10;}
}


16.和c语言有一点不一样的是,布尔类型0/1和true/false差不多的样子,但是java里面和0/1是无关的,它不属于数值类型,但是是基本类型,Java里面的布尔类型是可以和字符串进型运算的,虽然布尔类型刚开始并不是字符串类型,但是运算后就是可以是;关于自动转换,小的可以向大的转化,但是char只可以向int,虽然long是64位,但是可以向float32为转换;


17.字符串类型不可以直接转换成基本类型,但是可以有对应的方法:p60,比如整型转换可用方法Integer.parseInt(a),也就是把字符串a转换成整数;


18. 基本类型算术的时候是会自动类型提升,以至于Java里面short类型有这样的表达式是错误的,b=b-2;但是如果用拓展运算符写成这样就可以了:b-=2;


19:在java里面可以用==比较字符串,但是这样比较有缺点;


20.按位异或^两个不一样的才取一;>>>总是以零补位,>>按照最高位来补有两种,而左移只有一种也就是补零,移位要先学会取余,比如移位33和1在int类型都是一样的;


21:在Java里面的比较运算符的结果是布尔类型,而不是0/1;


22:对于==如果都是数值类型的话,类型不一样也是可以比较的,但是对于引用类型如果不是父子关系不可以比较,要是同一个对象才有可能返回true;


23:在Java里面有一个短路&&,有一个不短路&;或也是一样


24:通常Java是以打印字符串的形式来打印变量;


25:对于Java来说,不仅break可以结束当前的循环,还可以结束所在的整个外部循环,先设置一个标签在循环要结束循环的前面,然后在里面用break加这个标签就可以实现打破它们从里到外之间的循环了;

26:和c语言不同的是,Java不可以及设置数组的长度的同时又对其初始化,只可选其一中;分别是初始化自动让系统计算长度,和给长度然后后系统初始化;分别叫做静态和动态;使用静态初始化简化语法不可以用var类型,在Java里面就算是局部变量也是会对刚开始数组初始化为零;

27:类之间的成员可以相互调用,但是static修饰的成员不能访问没有的;


28:Java里面可以有可以变参数,但是只能放到最后一个并且最多只有一个。


29:成员变量会自动初始化;可以有同名的方法,叫重载,但是不可以有同名的成员变量;


30:可以成员变量和局部变量同名,方法里面局部变量会将成员变量覆盖,如需调用,用this或者类名;来引用,如果不是static类型就只能用this。

31:和c语言不同的一点是,在Java一个类里面是可以把顺序打乱的,但是方法里面是严格按照顺序的,其他的,比如方法在被应调用的后面是没关系,不会报错的;
(Test,Person,Main)举例代码到时候补上;

关于刷题:

第一道,烦恼的高考志愿

刚开始用暴力,然后一直卡Test2,再用直接插入排序,快排,时间长了,(其实之前还是有一点错误的,可能是由于那个错误)然后用的是c++的sort函数,然后把小错误纠正了一下,就以一半分(只有一半分)堪堪过了:

我觉得自己只有一半分可能是没有用到二分查找,我的搜索是暴力搜索,先将学生估分和学校分数线都排序,然后从小到大搜索,分三种情况,如果那个学生的分数比最低的分数线都要低那那个学生估的最好也只能是最低的,后面的都是这样,如果该学生可以找到一个比他小的和比他大的那么估的最好的就一定是这两者的其中一个,最后如果这个学生的分数比学校分数线都要高的话就可以直接求最高的,当然这里有一个技巧,每个学生在哪里停止,下一个学生就从他的较低分开始,这样就避免重复多次扫描。

注意:这里的h也就是不满意度之和是有可能超过int的范围的所以要用long long;

下面是代码:

#include<bits/stdc++.h>
using namespace std;int c[100005];
int d[100005];
int main()
{int n,m;scanf("%d %d",&m,&n);for(int i=1; i<=m; i++){scanf("%d",&c[i]);}sort(c+1,c+m+1);for(int i=1; i<=n; i++){scanf("%d",&d[i]);}sort(d+1,d+n+1);long long h=0;int l=1;int minn;for(int i=1; i<=n; i++){for(int j=l; j<=m; j++){if(j==m){minn=abs(d[i]-c[j]);l=m;}else if(d[i]<=c[l]){minn=c[l]-d[i];break;}else if(d[i]>=c[j]&&d[i]<=c[j+1]){int z=abs(c[j]-d[i]);int x=abs(c[j+1]-d[i]);minn=x>z?z:x;l=j-1;break;}}h+=minn;}printf("%lld",h);return 0;}

第二道:领地选择​​​​​​

刚开始想的是以正方体的边长为单位逐个循环,每找到一个符合题意的正方形就将它进行循环求和,但是会发现循环套循环会爆炸,数据太大了,所以采用动态规划,里面的一个二维数组求前缀和;

我觉得这篇博客讲的很好:浅谈二维前缀和 

动态规划就是讲究一个本来是未知,把它装作已知,最后向已知走;在这个题里面,先是用动态规划将每个以最左上角为一个顶点目前坐标为右下角顶点的所有矩形的权值都求出来,然后用来求以c为边长的某个正方形,求里面的最大值;在这里面要注意两点:

1.做这种题目一定要注意不要数组越界,控制好变量范围,我是通过将整个0行0列都赋值为0;

2.最后这个最大值初始化一定要足够小,比如int的范围最小是2*10^-10多,不然过不了。

上代码:

#include<stdio.h>
int a[1010][1001];
int b[1001][1001];
int main()
{int n,m,c;scanf("%d %d %d",&n,&m,&c);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}int maxx=-2000000000;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){b[i][j]=a[i][j]+b[i][j-1]+b[i-1][j]-b[i-1][j-1];}//动态规划,这里也是二维数组前缀和;这里不设置以零为边界的初始化为零;可以从前开始往后求int mx,my;for(int i=c;i<=n;i++){for(int j=c;j<=m;j++){int mm=b[i][j]-b[i-c][j]-b[i][j-c]+b[i-c][j-c];if(maxx<mm){maxx=mm;mx=i-c+1;my=j-c+1;}}}printf("%d %d",mx,my);return 0;}

最最最后,疲惫的心灵怎么能少得了一碗热腾腾的心灵鸡汤呢:

你要接受自己的普通,然后拼尽全力去与众不同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023 全球数字经济大会人工智能高峰论坛,和鲸科技入选北京市人工智能行业赋能典型案例

7月&#xff0c;由国家发展改革委、工业和信息化部、科技部、国家网信办、商务部、中国科协联合北京市人民政府共同主办“2023全球数字经济大会”在京召开&#xff0c;本届活动主题为“数据驱动发展&#xff0c;智能引领未来”。其中“人工智能高峰论坛”重点围绕通用人工智能大…

【雕爷学编程】Arduino动手做(150)---旋转角度传感器模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

图神经网络:(图像分割)3D人物图像分割

文章说明&#xff1a; 1)参考资料&#xff1a;PYG的文档。超链。斯坦福大学的机器学习课程。超链。(应该要挂梯子)。博客原文。超链。(应该要挂梯子)。原文理论参考文献。超链。提取码8848。 2)我在百度网盘上传这篇文章jupyter notebook和预训练模型。超链。提取码8848. 3)博主…

【Spring Boot】Spring Boot配置文件详情

前言 Spring Boot是一个开源的Java框架&#xff0c;用于快速构建应用程序和微服务。它基于Spring Framework&#xff0c;通过自动化配置和约定优于配置的方式&#xff0c;使开发人员可以更快地启动和运行应用程序。Spring Boot提供了许多开箱即用的功能和插件&#xff0c;包括嵌…

微信小程序 滚动到底部加载新的数据 之后滚动到顶部

1.配置到底部监听 在app.json的window里面加入 里面的300表示距离底部300rpx触发onReachBottom事件 默认50rpx "window": {"onReachBottomDistance": 300}, 2.在数据列表的js页面 /*** 页面上拉触底事件的处理函数*/onReachBottom() {console.log("…

消息中间件面试题详解

RabbitMQ 如何保证消息不丢失 消息的重复消费问题如何解决 rabbitmq中死信交换机&#xff08;RabbitMQ延迟队列有了解吗&#xff09; 延迟队列&#xff1a;进入队列的消息会被延迟消费的队列 场景&#xff1a;超时订单&#xff0c;限时优惠&#xff0c;定时发布 延迟队列 …

【Linux】-第一个小程序(进度条)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 &#x1f389;作者宣言&#xff1a;认真写好每一篇博客 &#x1f38a;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作…

真赞!IDEA中可以这么玩MyBatis,让编码速度飞起!

本篇博客图解 MyBatis Generator 的使用过程&#xff0c;并结合实战说明逆向工程的使用方式。 搭建 MyBatis Generator 插件环境 a. 添加插件依赖 pom.xml <!--mybatis 逆向生成插件--> <plugin><groupId>org.mybatis.generator</groupId><artifac…

iPad平板用的触控笔什么牌子好?主动式电容笔推荐

现在&#xff0c;电容笔已经成为在线办公、在线教育等产业中的热门产品&#xff0c;那么&#xff0c;平替电容笔是否会代替苹果原有的电容笔呢&#xff1f;实际上&#xff0c;你根本不需要花那么多钱去买一个原装的苹果电容笔。一支普通的平替式电容笔只需要一两百元&#xff0…

微分方程应用——笔记整理

首先&#xff0c;根据正常思路走&#xff0c;化简得到式子&#xff1a; 不难发现&#xff0c;设 后面得出该方程的通解&#xff1a; 这里要注意什么等于这个通解 --- z 又因为该曲线过点 所以可以求出c为3 该题虽然简单&#xff0c;但是要注意几个问题&#xff0c;该定…

【封装丨工具类】

封装工具类 封装 Java 工具类1. 使用静态工厂方法或静态方法封装实例2.将工具类中的方法进行分组3. 常用方法定义为静态方法或枚举4. 工厂 | 抽象工厂模式5. 访问数据库5.1 JDBC API &#xff1a;5.2 第三方数据库 封装 Java 工具类 1. 使用静态工厂方法或静态方法封装实例 使…

netty学习(2):多个客户端与服务器通信

1. 基于前面一节netty学习&#xff08;1&#xff09;:1个客户端与服务器通信 只需要把服务器的handler改造一下即可&#xff0c;通过ChannelGroup 找到所有的客户端channel&#xff0c;发送消息即可。 package server;import io.netty.channel.*; import io.netty.channel.gr…