牛客网刷题中秋节前开启java专项练习错题总结第一天

Posted 莪假裝堅強

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网刷题中秋节前开启java专项练习错题总结第一天相关的知识,希望对你有一定的参考价值。

【牛客网刷题】中秋节前开启java专项练习错题总结第一天

概述

还有十几天就到中秋节了,从此又老了一岁,也多了一年的知识积累。对于这样一个特殊的节日,今年希望通过一种特殊方式度过。决定在中秋节之前开启做题之路🦌,对,就是做题,说到做题,应该有好长的时间没有好好的做过一整套的题目,已经忘记了做题的感觉了。


经过一段短暂都回忆之后,似乎回想起来了做题对于我来说比较深刻的两点感悟。

  • 首先做题过程是一个让大脑可以持续思考的过程。同时也可以发现自己的知识点中欠缺的地方。从而有一种想要立刻将欠缺的地方进行弥补的冲动感。

  • 做题的过程是一种持续享受的过程,特别是是做出一道比较有深度的题目时,这种成就感可以让自己的大脑兴奋一整天,就好像坚持跑完25分钟的长跑之后停下来时的感觉,真的很爽。

思来想去决定做牛客中的java专项练习题,总共八百多道题目,希望可以在中秋节之前做完第一遍。在这里提前祝自己中秋节快乐😊

写在前面

很久很久之前就发现了牛客网这个很不错的做题网站,差不多一年前通过它写了一些和前端有关的题目,基本上每个专项练习都没有完全的写完,或者说叫做基本没怎么写。因此感觉有些遗憾。

之前一直没有很好的经营它,注册之后就一直没怎么登录过,然而今天通过自己的一番打理信息的完善之后,并大致的了解了它的功能和它能给我带来的帮助之后,就对它产生了不舍之感

通过查看之前的做题数据,可以说是惨不忍睹,基本上只能说是做过。

从下面的数据可以看到编程语言6.2%,下面的八项除了go之外,其它的语言都有一定的学习和接触,并且一些如cssc++等都有做了一些题目,不过都没有超过一百。从今天开始决定坚持将java的844道题目都做一遍。并将一些比较有代表性的错题进行记录。

  • 随着知识扩展,一些java语言的基础知识许多都忘记了
  • 为了检测自己java知识的不足之处,希望可以通过专项练习题的方式检测掌握不是很好的知识点
  • 分析错题,并且通过题目联想相似的知识点,让知识产生联系,同时挖掘之前没有接触到的细节

错题分析

下面是从错题中挑选了几道比较有代表的性的错题,希望可以通过本次的总结减少以后的出错。🐕

可以看到网站很贴心的将错题单独开了一个专栏,可以很方便的找到错题。
在使用一个网站之前对于一个网站的的所有功能有一个大致的了解,会让自己更加的依赖该网站。🐕

值得记录的错题

💪 题目一


👌 本题知识点

首先需要知道的是Java表达式转型规则由低到高转换

  1. 所有的byte,short,char型的值将被提升为int型;’

  2. 如果有一个操作数是long型,计算结果是long型;

  3. 如果有一个操作数是float型,计算结果是float型;

  4. 如果有一个操作数是double型,计算结果是double型;

  5. 被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化

🐇 题目分析

语句一:由于b1和b2都是btye类型的,相加的时候将向上转为int类型,使用byte类型接收是错误的
语句二: b4,b5和b6都是btye类型的,但是由于使用final进行修饰,根据上面的第五点,b6可以是任何的数据类型,所以正确
语句三: b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);,所以错误
语句4:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变,故错误。

最终答案:bcd

❌ 错误原因

  • 对于第五点没有了解过

💪 题目二

本题对于某个知识点不是很了解的话,很容易出错。

👌 本题知识点

在Integer中,使用 == 来作比较两个对象时(和常数进行比较时,是直接比较值是否相同),需要注意的一点是:对Integer对象进行初始化赋值时,是通过调用valueOf来实现的。
而对于-128到127之间的数(最小值-128是确定了的,但是最大值127是可以通过虚拟机的配置文件来配置),Java会对其进行缓存。而超出这个范围则新建一个对象。
也就是说,如果第一次创建值时在缓存范围之内,第二次如果也是第一次相同的数,其实就是直接在缓存中取的,并没有新建对象,地址相同。

所以答案选:D

💪 题目三

用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。综上所述,选项A正确。

总结


今天是第一天java的专项练习题,错的比较多,139道题,做错了78道题,有一部分题是由于粗心没有认真的审题,有的题目是由于一些知识忘记了,然而还有一些题目的确是之前没有接触过的知识点。通过这次的做题经历发现了自己没有掌握的知识点,下次做题希望可以提高正确率。💪


写在最后

在中秋节到来之前将java专项练习题做完一遍,并将不是很熟悉的知识进行更加深入的研究和复习。

牛客网刷题记录 || 第一番

🛒本文收录于专栏【牛客网刷题记录】
📢专栏目的是对于刷题过程的记录,题型的列举和讲解,会持续输出,欢迎免费订阅!!

这是牛客网刷题记录专栏第一篇博文,先给大家简单介绍一下牛客网,牛客网是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的优质网站牛客网题库中包含几万道题目,注重通过边学边练的模式揽获编程人员的喜爱

牛客网干净整洁的界面,人性化的布局,高质量的题库题解,丰富的大厂面试题,让我想把它分享给大家,推荐大家来牛客网刷题,链接我就放在这了有需要自取👉点击开始刷题

小Tips:注册完之后,不用填信息直接点X,开启刷题之旅~

目录


C语言入门

🔥1.复制部分字符串

👌描述

键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串

输入描述:
键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len)

输出描述:
输出复制的新字符串

示例1:

输入:helloworld
6
输出:world

👌代码

#include <iostream>
using namespace std;

int main() 

    char str[30] =  0 ;
    cin.getline(str, sizeof(str));

    int m;
    cin >> m;

    // write your code here......
    char *p = NULL;
    p = &str[m-1];
    cout << p;


    return 0;

👌题解

*p 和p[]一个意思,p是一个char数组的首地址,然后把str[m-1]的地址取出来赋值给p,就可以打印出来m-1后的字符串,很nice


🔥2.牛牛的排序

👌描述

牛牛试图给一个长度为 n 整数数组排序,即实现一个 void sort(int *array,int n)

输入描述:
第一行输入一个正整数 n ,表示数组长度。
第二行输入 n 个正整数,表示数组中每个元素的值

输出描述:
输出排序后的数组

示例1:

输入:
5
2 9 8 1 3
输出:
1 2 3 8 9

👌代码

#include <iostream>

using namespace std;

int main() 
    int n=0,v=0;
    cin>>n;
    int arr[n];
    for(int i=0;i<n;i++)
        cin>>v;
        arr[i]=v;
    
    sort(arr,  n);


void sort(int *array,int n)

    for(int i=0;i<n;i++)
        for(int j=0;j<n-i-1;j++)
            if(array[j]>array[j+1])
                int t=array[j];
                array[j]=array[j+1];
                array[j+1]=t;
            
        
    
    for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
    

👌题解

这个牛牛排序,就是一个数组排序问题,用到了冒泡排序一个很关键和实用的排序方法,for循环控制一下输入输出就ok了,相信大家都能看懂的


C++入门

🔥3.输出水仙花数

👌描述

在控制台输出所有的“水仙花数”

水仙花数是指一个三位数,其各位数字的立方和等于该数本身

举例:
153就是一个水仙花数
153 = 111 + 555 + 333 = 1 + 125 + 27 = 153

输入描述:

输出描述:
输出所有的“水仙花数”,每个“水仙花数”占一行,格式如下:
xxx
yyy
zzz

👌代码

#include <iostream>
using namespace std;

bool Nacissistic(int num)

	int t = num;
	int a = num % 10;
	num /= 10;
	int b = num % 10;
	num /= 10;
	int c = num % 10;

	if (t == a*a*a + b*b*b + c*c*c)
		return true;
	else
		return false;

int main() 
	int num;
	for (num = 100; num <= 999; num++)
		if (Nacissistic(num))
			cout << num << endl;
		
	
	return 0;


👌题解

要知道水仙花数只会是三位数,要把所有的三位数,对每一个三位数检查是否是水仙花数,用对10取余求得个位数字,让其除以10以后再对10取余求得10位数字,最后再除以10以后对10取余求得百位数字。三个数字各自的三次方求和与原数比较,如果相等则是水仙花数,输出该数


🔥4.计算小球走过的路程和反弹高度

👌描述

一球从 h 米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第 n 次落地时共经过了多少米?第 n 次返弹多高?

输入描述:
输入小球下落的高度和落地的次数(先输入小球初始高度再输入反弹次数)

输出描述:
输出小球第 n 次 落地时经过的距离和第 n 次反弹的高度(保留小数点后1位)

示例1:
输入:
100 1
输出:
100.0 50.0

示例2:
输入:
100 3
输出:
250.0 12.5

👌代码

#include <iostream>
#include <iomanip>
using namespace std;

int main() 

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;
    
	// write your code here......
    //记录第n次反弹时总共走过的记录
    double temp=0;
    for(int i=1;i<=n;i++)
        h/=2;
        temp+=h*3;
    
    //减去最后反弹的高度h
    cout<<fixed<<setprecision(1)<<temp-h<<" "<<h<<endl;
    return 0;

👌题解

利用循环计算每次反弹时的高度(记为h),以及经过了多少米(记为temp),由于要输出的是第n次落地时走了多少米,所以temp要减去最后反弹的高度h


还是推荐大家来牛客网一起刷题哦~👉点击开始刷题

以上是关于牛客网刷题中秋节前开启java专项练习错题总结第一天的主要内容,如果未能解决你的问题,请参考以下文章

牛客网刷题记录 || 第一番

《牛客》推荐题目开启方法

牛客网刷题——JAVA

牛客网刷基础题错题集

C语言之牛客网刷题笔记 点进来保证让知识充实你一整天

牛客网刷题ACM模式 Objc Swift