DESKTOP-TEACTL5_20200905-曾越

问题1:

月考卷编程题第一题将字符串反向输出,考试时思路是对的,问题是将字符数组转为字符串,上次考试中是将字符串转为字符数组,用到了.toCharArray()方法,这次考试过后新增String.valueOf(数组名)方法。现将考试时手写代码与考试后在Spring上编写代码放在一起作比较:

考试时手写代码如下:

package firstmonthexam;

public class ForthLast {

public String arraySort(String s) {

    char[] chars=s.toCharArray();
    int n=chars.length;
    char[] array=new char[n];
    for(int i=0;i<n;i++) {
        array[i]=chars[n-i];
    }
    return array.toString();
}

public static void main(String[] args) {    
    ForthLast f=new ForthLast();
    String s="abcdefg";
    String t=f.arraySort(s);
    System.out.println(t);

}

}

考试结束后在Spring上编写:

package firstmonthexam;

public class ForthLastFix {

public String arraySort(String s) {

    char[] chars = s.toCharArray();
    int n = chars.length;
    char[] array = new char[n];
    for (int i = 0; i < n; i++) {
        array[i] = chars[n-i-1];
    }
    return String.valueOf(array);//将字符数组转换成字符串
}

public static void main(String[] args) {
    ForthLastFix f = new ForthLastFix();
    String s = "abcdefg";

    String t=f.arraySort(s);

    System.out.println(t);

}

}

传入的初始字符串是:abcdefg

程序执行后输出结果:gfedcba

总结:在考试时思路是对的,新记住一个String.valueOf(数组名)方法,有个数组下标越界的问题在编译环境下才改正过来。

问题2:

月考第四道编程题原本要求将输入的单词放入集合,然后排序后打印,由于没有学习集合,尝试在此改为放入数组然后再排序后输出排序后结果:

考试的时候一直在那里纠结这里的数组长度如何在每输入一个单词后自动加1的问题,从而导致考试时没写出来,现在直接给一个确定的长度,这里我假设用来接收单词的数组的长度就是8,写完如下:

package firstmonthexam;

import java.util.Arrays;
import java.util.Scanner;

public class LastOne {

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String[] words=new String[8];
    int n=words.length;
    for(int i=0;i<n;i++) {
        words[i]=sc.nextLine();
    }
    System.out.println("排序前:");
    for(int i=0;i<n;i++) {
        System.out.println(words[i]);
    }

    Arrays.sort(words);
    System.out.println("排序后:");
    for(int i=0;i<n;i++) {
        System.out.print(words[i]+"\t");
    }
}

}

从键盘输入8个单词后回车结果如下:

one
two
three
four
five
six
seven
eight
排序前:
one
two
three
four
five
six
seven
eight
排序后:
eight five four one seven six three two

问题3:

月考卷大乐透编程题,考完听老师讲了一遍思路,自己按理解写了一遍:

package firstmonthexam;

import java.util.Random;

public class ThirdLast {

private static int[] choose(int n, int area) {

    int[] array = new int[n];
    Random r = new Random();

    for (int i = 0; i < n; i++) {
        array[i] = r.nextInt(area) + 1;

        if (i >= 1) {//刚产生第一个数array[0]时不需要作比较
            for (int j = i; j > 0; j--) {// 确保每个区不会产生重复的数
                if (array[i] == array[j - 1]) {

                    i--;
                }
            }
        }

    }

    return array;

}

private static void exNum(int[] a) {
    for (int i = 0; i < a.length; i++) {
        System.out.print((a[i] < 10 ? "0" + a[i] : a[i]) + "\t");
    }
}

public static void main(String[] args) {

    choose(5, 34);
    choose(2, 12);
    // Arrays.toString(choose(5,34))+Arrays.toString(choose(2,12))
    // System.out.println(choose(5,34).toString());
    exNum(choose(5, 34));
    exNum(choose(2, 12));

}

}

总结:原本打算是先产生一组数组后遍历整个数组然后发现有重复的就重新产生一个新的数组,后来觉得这样不合适,应该是产生的一个新的数组元素与之前的作比较,相同就重新产生该元素,而不是重新产生整个数组,以上代码能够实现这一思想。

吐槽:

热感冒好难顶。