Javalab10小结

发布时间 2024-01-03 23:41:14作者: sixsix666

有三题,第一题不用多说,讲下第2,3题

第二题:

 因为moodle看不了题目,通俗讲一下,大致就是给一串数字然后检索把0-9每个数字逐一挑出来然后按树状图打印出来

杰哥的想法:

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的方法

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就先告一段落,先洗澡了。