今天是周三,不过准确的来说写这篇日志的时候是周四上午11点了。不知道为什么感觉很懒,很累,提不起来干劲。周三没有什么很特别的事情发生,和平日一样,自己在工位上学JAVA的基础语法,写写基本的练习题什么的。这样的日子好蛋疼啊,每天在这里干坐着,感觉差距很大,从零开始学也太尴尬了。不提了,比昨天的自己有进步就好?这个鸡汤有点老土哦,嘿嘿嘿,那我能咋办呢,也就只能这么安慰安慰自己了。

package homework;

/**
 * 统计找出一千万以内,一共有多少质数
 *
 * 质数概念: 只能被1和自己整除的数
 * 举例:
 * 5只能被 1和5 整除,所以是质数
 * 8可以被2整除,所以不是质数
 */
public class Test {
    public static void main(String[] args) {
        long sum = 0;
        long MAX = 1000 * 10000;
        for(int i = 1; i < MAX; i++){
            if(isPrime(i)) {
                sum++;
            }
        }
        System.out.println(sum);
    }
    private static boolean isPrime(long num){
        for(long i = 2;i * i <= num;i++){
            if(num % i == 0) return false;
        }
        return true;
    }
}
package homework;

/**
 * 埃拉托斯特尼筛法
 * 统计找出一千万以内,一共有多少质数
 *
 * 质数概念: 只能被1和自己整除的数
 * 举例:
 * 5只能被 1和5 整除,所以是质数
 * 8可以被2整除,所以不是质数
 */
public class Test {
    public static void main(String[] args) {
        int sum = 0;
        int MAX = 1000 * 10000;
        //用数组将1000万以内的数分为两大派系,素数用0代替数值,合数用1代替数值;
        //一开始默认全部为素数,所以值全部为0,等到开始筛选的时候再把为合数的赋值为1
        int num[] = new int[MAX];
        //由于1规定不是素数,所以要提前用1标值
        num[0] = 1;
        double prescription = Math.sqrt(MAX);
        //因为1不是素数,所以从2开始筛选
        for (int i = 2; i < prescription; i++) {
            //开始把所有素数的倍数剔除,剩下的就是素数
            for (int j = i * i;j < MAX;j = j + i){
                //把素数的倍数剔除,也就是赋值为1,不是素数就是合数
                num[j - 1] = 1;
            }
        }
        for (int i = 2; i < num.length; i++) {
            if(num[i] == 0)
                sum++;
        }
        System.out.println(MAX / 10000 + "万以内的素数个数之和为:" + sum);

    }
}
package homework;
/**
 * 通过Scanner从控制台读取字符串,然后把字符串转换为字符数组
 * 参考的转换方式:
 *
 * String str = "abc123";
 * char[] cs = str.toCharArray();
 * 转换为字符数组后,筛选出控制台读取到的字符串中的大写字母和数字,并打印出来
 */

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] charStr = str.toCharArray();
        for (int i = 0;i < charStr.length;i++){
            if(Character.isUpperCase(charStr[i]) || Character.isDigit(charStr[i])){
                System.out.print(charStr[i]+" ");
            }
        }
    }
}
package homework;

import java.util.Random;

/**
 * 创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
 *
 * 给点提示: 数字和字符之间可以通过互相转换
 *
 * char c = 'A';
 * short s = (short) c;
 *
 *
 * 通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了
 */
public class Test {
    public static void main(String[] args) {
        int length = 5;
        Random random = new Random();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0;i < length;i++){
            int number = random.nextInt(3);
            int result = 0;
            switch (number){
                //case0是输出数字
                case 0:
                    result = (int)(Math.random() * 10 + 48);
                    char s = (char) result;
                    stringBuilder.append(s);
                    System.out.print(s);
                    break;
                //case1是输出小写字母
                case 1:
                    result = (int)(Math.random() * 26 + 97);
                    char s1 = (char) result;
                    stringBuilder.append(s1);
                    System.out.print(s1);
                    break;
                case 2:
                    result = (int)(Math.random() * 26 + 65);
                    char s2 = (char) result;
                    stringBuilder.append(s2);
                    System.out.print(s2);
                    break;
                default:
                    break;
            }
        }
    }
}
package homework;

/**
 * 创建一个长度是8的字符串数组
 * 使用8个长度是5的随机字符串初始化这个数组
 * 对这个数组进行排序,按照每个字符串的首字母排序(无视大小写)
 *
 * 注1: 不能使用Arrays.sort() 要自己写
 * 注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序
 */
public class Test {
    public static void main(String[] args) {
        String[] strings = getStringArray(8,5);
        printStringArray(strings);
        stringArraySort(strings);
        printStringArray(strings);

    }
    /**
     * 生成一个保存所有大写小写字母,数字的字符串
     */
    private static String strList(){
        StringBuilder s = new StringBuilder();
        //字符串填充0-9
        for (char c = '0';c <= '9';c++){
            s.append(c);
        }
        //字符串填充a-z
        for (char c = 'a';c <= 'z';c++){
            s.append(c);
        }
        //字符串填充A-Z
        for (char c = 'A';c <= 'Z';c++){
            s.append(c);
        }
        return s.toString();
    }
    /**
     * 生成指定长度的随机字符串
     */
    private static String getString(int length){
        //保存数字、大小写字母的字符串
        String str = strList();
        int strLength = str.length();
        //生成长度为length的char数组
        char[] ch = new char[length];
        //给char数组填充字符
        for(int i = 0;i < length;i++){
            int j = (int)(Math.random() * strLength);
            ch[i] = str.charAt(j);
        }
        return String.valueOf(ch);
    }
    //创建长度m的字符串数组,并进行随机初始化,数组里每个的字符串长度为n
    private static String[] getStringArray(int m,int n){
        String[] strings = new String[m];
        for (int i = 0;i < m;i++){
            strings[i] = getString(n);
        }
        return strings;
    }
    //对字符串数组进行排序,无视大小写,选择排序
    private static void stringArraySort(String[] strings){
        //最后一位可以不取,前面都选择排序好了最后一个肯定是最大的
        for (int i = 0;i < strings.length - 1;i++){
            for (int j = i + 1;j < strings.length;j++){
                if(strings[i].compareToIgnoreCase(strings[j]) > 0){
                    String temp = strings[i];
                    strings[i] = strings[j];
                    strings[j] = temp;
                }
            }
        }
    }
    //打印字符串数组
    public static void printStringArray(String[] strings) {
        System.out.print("{" + strings[0]);
        for (int i = 1; i < strings.length; i++) {
            System.out.print(", " + strings[i]);
        }
        System.out.println("}");
    }

}