Javalab10小结
有三题,第一题不用多说,讲下第2,3题
第二题:
因为moodle看不了题目,通俗讲一下,大致就是给一串数字然后检索把0-9每个数字逐一挑出来然后按树状图打印出来
杰哥的想法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package lab10; import java.util.Scanner; public class Task2 { public static void main(String[] args) { String str= "1022473578476949426110832338899437170338449409627474102214022150928" ; int [] a= new int [ 10 ]; for ( int i= 0 ;i<str.length();i++) { int num=str.charAt(i)- '0' ; a[num]++; } int max= 0 ; for ( int j= 0 ;j< 10 ;j++) { if (a[j]>max) { max=a[j]; } } for ( int i=max;i>= 1 ;i--) { for ( int j= 0 ;j< 10 ;j++) { if (a[j]>=i) { System.out.print( "[" +j+ "] " ); } else { System.out.print( " " + " " + " " ); } } System.out.println(); } } } |
大致分为三部分
一:
因为其实要检索每一个数字然后按照其位置按树状图打印,换句话说就是判断每个数字有多少个比如0有3个,1有7个这样子(没想到,看题目看的还是不够彻底),这样我们就可以进行检索数字然后在对应的地方上加加,那又要在哪个地方上加呢,并且我们又要打印那就可以想到开创一个长度为10的数组然后按照其对应的数字在其上加。
二:
最后要打印比并且还是从下往上打,那肯定会有一个或多个数字出现最多次,那么就可以通过for循环来获取到max值。
三:
之所以要获取到max值是因为我们就可以判断让他大于一个值的时候就打印,这个值就是max,并且要--操作,小于的话就打印空格。相当于把每一层都遍历一边数组,大于等于这个值就打印否则空格。
第三题
就是给一个文档判断格式是否正确,两个要求,1:前三个是不是t00,t00后是否跟着的就是6个数字,2:空格右边的数字是不是0-100(左边的和右边的会有空格隔开 eg:T00123456 77)
professor的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package lab10; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Task3 { public static void main(String[] args) throws NumberFormatException, IOException { FileReader fr= new FileReader( "C:/Users/ASUS/Desktop/StudentScore.txt" ); BufferedReader br = new BufferedReader(fr); br.readLine(); while (br.ready()) { int a = 0 ; String str = br.readLine(); String[] arr = str.split( "\t" ); if (! "T00" .equals(arr[ 0 ].substring( 0 , 3 )) || arr[ 0 ].length() != 9 ){ System.out.println(str); continue ; } if (arr[ 1 ].trim().length() == 0 ){ System.out.println(str); continue ; } a=Integer.parseInt(arr[ 1 ].trim()); if (a < 0 || a > 100 ) System.out.println(str); } br.close(); } } |
一:
因为题目要求要判断左边的开头是不是T00然后接着的是不是6个数字,右边是不是0-100,那么就可以把他分为两部分,那么就可以通过split(" ")获取数组分为两部分
二:
不懂循环几次那么while循环while(br.ready)判断流是否准备好,返回的是boolean,之后就读行切割,分为两个部分
三:
判断左边是不是T00那就截取前三位后获取长度是不是9,下面重点讲右边部分的判断和一些注意事项
首先有些行结尾不是直接以数字结尾比如是"78 "那么我们读右边部分的时候转为int就会报错并且不能判断,所以此时引用string中的trim方法来进行去除头尾空格,其实要严格的话再用character中的isDigit判断每位是不是数字因为可能是6 6这样
去除空格后因为有些压根就没数字那么判断其数组arr[1]长度是不是等于0之后再判断是不是0-100
每个判断发现不合规范要输出并且cotinue
今天的study就先告一段落,先洗澡了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具