java题目集1~3总结Blog
一、前言
(1)大作业1:因为是第一次java作业,虽然题量比较多,共有9题,但是难度比较简单,题目的内容与之前写过的C语言题目很相像,都是输入题目要求的数字后进行相应的计算,输出结果。
第一题要求输入两个数值(身高、体重)进行身体质量指数(BMI)测算。
第二题要求输入质量(以千克为单位)和长度(以米为单位)进行计量单位换算为以磅和英寸为单位的数值,与第一题一样考察了我们对数字计算的处理能力。
第三题要求输入10个数字并计算所有奇数的和,考察了我们创建数组并进行相应的排除,最终得出答案的能力。
第四题要求输入有关购房的一些数据,最后输出房产税费计算的结果,本题与之前几题相比较为复杂,因为处理的数据和进行的计算步骤比较多。
第五题要求根据选项进行游戏中种族和角色的选择,此题难度较低,只需要进行简单的判断就能得到结果。
第六题是要求输入我们学校中学生的学号,进行识别后输出该学生的学院、班级等信息,在此过程中还需要排除一些非法输入,本题与之前题目不同的是需要对一个8位数字组成的学号进行分成四个部分的处理,考察了我们对数字除法和取余及数组的运用。
第七题是运用巴比伦法求平方根近似值,过程中需要运用循环等知识。
第八题需要在一个输入的字符串中提取出其中的二进制数值序列,考察了对于字符串的处理与应用。
第九题需要在输入的三条边基础上判断该三角形为什么类型的三角形,这道题需要判断的条件很多,相对比较复杂。
(2)大作业2:第二次Java大作业的题量比较少,只有三题,都考察了我们对于字符串的处理,总体难度一般。
第一题要求输入一个由英文字母组成的字符串(大小写均可),然后将所有英文字母转换成它们在字母表中的序号,在此过程中我们需要了解相关字母的ASCII值,在字母ASCII值的范围内转化为数字。
第二题的题目要求比较复杂,要求输入0、1组成的二进制数据流,需要进行有效数据、奇偶校验、结束符等操作和判断,题目刚开始比较难理解,但理清思路后还是比较好入手的。
第三题与大作业1中的第六题比较类似,但此时输入的学号是字符串类型而不是整型,考察了我们对String的格式判断与内容提取。
(3)大作业3:第三次Java大作业虽然题目少,但是每道题的难度都很大,需要我们正确地综合运用所学的知识,并且每道题都与数学问题挂钩,考验了我们用java编程处理数学问题的能力。
第一题要求输入两个点的坐标,计算两点之间的距离,处理数据时需要排除字符串中的逗号和空格,提取其中的坐标数字,并且还需要排除非法格式和输入。
第二题是一个处理点线形综合问题的程序,其中有五个功能,并且每个功能要求输入的坐标数也不同,与数学相联系也大大加大了难度。
第三题是一个处理三角形的程序,与第二题有类似的地方,根据点坐标来判断三角形的各种问题十分麻烦,不仅需要数学知识,还要用代码将它正确解决。
二、设计与分析
1.题目集2的7-2分析
设计思路:将字符串分解为一个个字符,对每个字符进行分析与判断,找到其中的联系与规律,就可以进一步实现对字符串的分析。
代码分析:
Scanner in = new Scanner(System.in);
String s = in.nextLine();
字符串的初始化
for(i = 0; i < s.length(); i++) { char n = s.charAt(i); if(n=='0') { flag=1; } } if(i<11||flag==0) { System.out.print("null data"); return; }
利用s.charAt()提取字符串中每个字符,并利用for循环遍历整个字符串,利用flag记录字符串中0的个数,如果字符串中没有0,则说明输入数据全1没有起始位,用i表示字符串中的字符个数,如果i<11,说明输入数据不足11位,这两种情况都要输出"null data"。
for(i = 0;i < s.length();i++) { char a = s.charAt(i); int num = 0; if(a=='0'&&s.charAt(i+10)=='1') { for(h = i+1;h < i+9;h++) { if(s.charAt(h)=='1') { num++; } }
继续用s.charAt()处理字符串,判断有效数据之后是否为结束位“1”,假设h为第一位有效数字,利用num进行之后的奇偶校验。if(num%2==0&&s.charAt(i+9)=='1') {
if(num%2==0&&s.charAt(i+9)=='1')
{
System.out.println(j+":"+s.charAt(i+1)+s.charAt(i+2)+s.charAt(i+3)+s.charAt(i+4)+s.charAt(i+5)+s.charAt(i+6)+s.charAt(i+7)+s.charAt(i+8));
i+=10;
j++;
}
else if(num%2!=0&&s.charAt(i+9)=='0')
{
System.out.println(j+":"+s.charAt(i+1)+s.charAt(i+2)+s.charAt(i+3)+s.charAt(i+4)+s.charAt(i+5)+s.charAt(i+6)+s.charAt(i+7)+s.charAt(i+8));
i+=10;
j++;
}
else
{
System.out.println(j+":"+"parity check error");
i+=10;
j++;
}
else if(a=='0'&&s.charAt(i+10)!=1)
{
System.out.println(j+":"+"validate error");
i+=10;
j++;
}
利用之前得到的num进行奇偶校验,j用于记录有效数据的序号,得到一组有效数字后就自加一次,保证序号相匹配。
小结:charAt (int index) 方法 是一个能够用来检索特定索引下的字符的String实例的 方法. charAt()方法 返回指定索引位置的 char 值。
2.题目集3的7-1分析
设计思路:将输入的字符串去掉逗号和空格,得到输入的坐标数字,再根据学过的数学公式两点之间的距离公式,就可以得到结果。
代码分析:
String s2 = s.replaceAll(" ",","); String[] num = s2.split(","); double a = Double.parseDouble(num[0]); double b = Double.parseDouble(num[1]); double c = Double.parseDouble(num[2]); double d = Double.parseDouble(num[3]); double distance = Math.sqrt((a-c)*(a-c)+(b-d)*(b-d)); System.out.print(distance);
先利用replaceAll( )方法将空格替换成逗号,再用split( )方法去掉字符串中的逗号,接着利用Double.parseDouble( )方法得到每个坐标数字,最后进行数学计算输出结果。
小结:replaceAll () 方法用指定的 HTML 内容或元素替换被选元素。 提示: replaceAll () 与 replaceWith () 作用相同。 差异在于语法:内容和选择器的位置,以及 replaceWith () 能够使用函数进行替换。
split() 方法用于把一个字符串分割成字符串数组。
Double.parseDouble()是把括号里面内容变成double类型的,其中括号中的参数必须是String类型,否则转换会报错。如果要变成int类型,则用Integer.parseInt()。
3.题目集3的7-2分析
设计思路:先识别输入字符串的第一个数字,进行不同方法的计算,再得到输入的坐标数字,根据数字再结合数学方法得出最后答案。
代码分析:
switch (xx) { case('1'): { fn1(s); break; } case('2'): { fn2(s); break; } case('3'): { fn3(s); break; } case('4'): { fn4(s); break; } case('5'): { fn5(s); break; } default: { System.out.print("Wrong Format"); }
利用switch()对得到的第一个代表选项的数字进行处理,使其进入相对应的方法。
之后的方法是继续使用7-1中的三个方法,得到数字后进行数学方法计算。
4.题目集3的7-3分析
设计思路:与7-2相似,都是先识别输入字符串的第一个数字,进行不同方法的计算,再得到输入的坐标数字,先判断是否能构成三角形,再判断是否为正确格式,最后进行运算。
代码分析:
double a = Double.parseDouble(num[1]);
double b = Double.parseDouble(num[2]);
double c = Double.parseDouble(num[3]); double d = Double.parseDouble(num[4]);
double e = Double.parseDouble(num[5]);
double f = Double.parseDouble(num[6]); double d1 = Math.sqrt((a-c)*(a-c)+(b-d)*(b-d)); double d2 = Math.sqrt((a-e)*(a-e)+(b-f)*(b-f)); double d3 = Math.sqrt((c-e)*(c-e)+(d-f)*(d-f));
先得到坐标数字,再用数学方法计算距离,进行检验后完成之后的计算。
if(Math.abs(d1-d2)<0.00001&&Math.abs(d1-d3)<0.00001&&Math.abs(d2-d3)<0.00001) { System.out.print("true true");
} else if((Math.abs(d1-d2)<0.00001&&Math.abs(d1-d3)>0.1)||(Math.abs(d2-d3)<0.00001&&Math.abs(d1-d3)>0.1)||(Math.abs(d1-d3)<0.00001&&Math.abs(d1-d2)>0.1))
{ System.out.print("true false"); } else {
System.out.print("false false"); }
进行三角形构成条件判断,之后再进行等边和等腰三角形的判断,注意此时的距离为浮点型,判断两个浮点型是否相等不能直接 “==” 进行判断,而是用Math.abs(d1- d2)<0.00001进行判断。
三、踩坑心得
1.当题目中有许多条件时,可以将多个if语句替换为switch语句,使代码可读性强、易于维护,需注意的是一般情况下break是不能少的,否则可能会出现意料之外的错误。没有break,程序会继续执行后面的代码。
2.在对字符串进行处理时,最好先遍历一遍整个字符串,当不符合格式或输入错误时直接提示用户错误,否则可能导致结果出错。
3.判断两个浮点型是否相等不能直接 “==” 进行判断,而是用Math.abs(a - b)<0.00001进行判断。
4.在7-3这种开头有选项的题目中,需要注意此时表达选项的数字是提取出数字的数组的第"0"位,之后的坐标数字应该从"1"开始,如果没有注意答案就出错了。
5.对于全局变量和局部变量需要格外注意,不然容易导致结果出错。全局变量就是从定义的位置起,作用域覆盖整个程序范围的变量。而只在特定的过程或函数中可以访问的变量,被称为局部变量。
四、改进建议
1.本次作业没有使用类的方法,可以尝试使用类来解决问题。
2.有些代码中有一部分功能相同,可以改成方法,使代码更加简洁,也便于下次对代码进行修改。
3.7-3的难度很大,其中有部分较为复杂的数学问题没有解决,可以通过查阅资料或者咨询同学或老师找到正确的方法来解决。
4.在代码中多标明注释,以便理解和下次修改。
五、总结
1.通过这三次的习题集,题目难度由易到难,且每道题目之间都有或多或少的相似之处给予我们灵感,循序渐进地更加全面地解决问题,通过作业,我加深了对字符串,数组,方法等的理解,对它们的使用也更加熟练。
2.学习了replaceAll ()、split()和Double.parseDouble()三种对处理字符串的方法,replaceAll () 方法用指定的 HTML 内容或元素替换被选元素,split() 方法用于把一个字符串分割成字符串数组。
Double.parseDouble()是把括号里面内容变成double类型的,使我能够更加方便地处理字符串中蕴含的信息。
3.在作业过程中不能想当然,遇到问题可以使用debug调试找到出错的地方,遇到不会的地方要积极查阅、利用身边的资源。每次在作业中遇到无法解决的问题,我都会先在网上搜索资料和参考资料,如果还是无法解决,我会询问成绩较好的同学提供一些思路。
4.我认为第三次大作业的难度对于我来说还是很大的,对于一些还未解决的复杂的数学问题,我应该还没有找到正确的方法,在处理数学问题与编程相结合的问题,我还有许多地方需要学习和提升。
5.三次大作业虽然没有全部满分,但是对于我的学习还是非常有帮助的,提高了我的动手能力,进步了我的专业知识。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异