练习

273 阅读6分钟

07.21

1. 指定一个图书编号,01代表红楼梦,02代表西游记,03代表金瓶梅,04代表水浒传,对应编号输出。

  public class HomeWork1Test {
  @Test
     public void work01() {
    String number = "01";
    String result = "";
    switch (number) {
        case "01":
            result = "红楼梦";
            break;
        case "02":
            result = "西游记";
            break;
        case "03":
            result = "金瓶梅";
            break;
        case "04":
            result = "水浒传";
            break;
        default:
            break;
    }
    System.out.println(result);
}

2.指定一个分数,60分以下不及格,60-80之间及格,80-100优秀,要求只能使用switch。

@Test
public void work02() {
    int score = 80;
    String result = "";
    switch (score / 10) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            result = "不及格";
            break;
        case 6:
        case 7:
            result = "及格";
            break;
        case 8:
        case 9:
        case 10:
            result = "优秀";
            break;
        default:
            result = "输入有误!";
            break;
    }
    System.out.println(result);


}

3.使用while循环来输出10-15。

@Test
public void work03() {
    int i = 10;
    while (i <= 15) {
        System.out.println(i++);
    }
}

4. 假设,芳芳答应老王攒够60万就嫁给他,老王去隔壁街小黑屋卖血一次可以赚1000元,求老 王需要卖多少次血才能娶到芳芳。

@Test
public void work04() {
    int times = 0;
    int money = 0;
    while (money < 600000) {
        times++;
        money += 1000;
    }
    System.out.println(times);
}

5.小兵今年13岁,大兵36岁,求多少年后大兵的年龄是小兵的2倍?

@Test
public void work05() {
    int small = 13;
    int large = 36;
    int year = 0;
    while (small * 2 != large) {
        small++;
        large++;
        year++;
    }
    System.out.println(small);
    System.out.println(large);
    System.out.println(year);
}

6.使用dowhile循环来输出10-15。

@Test
public void work06() {
    int i = 10;
    do {
        System.out.println(i++);
    }
    while (i <= 15);
}

7.本金1万元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金,计算5年之后,获得的本金是多少?

@Test
public void work07() {
    double money = 10000;
    double annualInterestRate = 0.003;
    int year = 5;
    double interest = 0.0;
    for (int i = 0; i < year; i++) {
        interest = money * annualInterestRate;
        money = money + interest;
    }
    System.out.println(money);
}

8.求整数1-100的累加值,但要求第3,第6,第9...(3的倍数)个值,跳过不计算。

@Test
public void work08() {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 3 == 0) {
            continue;
        }
        sum += i;
    }
    System.out.println(sum);
}

9.利用for循环,输出1-100之间所有的偶数。

@Test
public void work09() {
    for (int i = 2; i <= 100; i += 2) {
        System.out.print(i + "\t");
    }
}

10.利用for循环,求从0开始每次加5,加多少次之后可以达到135。

@Test
public void work10() {
    int count = 0;
    for (int i = 0; i < 135; i += 5) {
        count++;
    }
    System.out.println(count);
}

11.你是一个土豪,你去参加非诚勿扰节目,现场一共有11位女嘉宾,从第一位女嘉宾开始循环出场,直到你喜欢的四号女嘉宾出场的时候,输出"I love you!"。

@Test
public void work11() {
    for (int i = 1; i <= 11; i++) {
        if (i == 4) {
            System.err.println(i + "号女嘉宾出场,I love you!");
            break;
        }
        System.out.println(i + "号女嘉宾出场!");
    }
}

12.交换变量值

@Test
public void work12() {
    // 方法一:引入第三方变量的方法;
    int a = 1, b = 2;
    int temp = a;
    a = b;
    b = temp;
    System.out.println(a);
    System.out.println(b);

    // 方法二:不引入第三方变量的方法
    int a1 = 1, b1 = 2;
    a1 = a1 + b1;
    b1 = a1 - b1;
    a1 = a1 - b1;
    System.out.println(a1);
    System.out.println(b1);
}

13.判断100-120之间有没有能被23整除的数

@Test
public void work13() {
    boolean flag = false;
    for (int i = 100; i <= 120; i++) {
        if (i % 23 == 0) {
            flag = true;
            break;
        }
    }
    System.out.println(flag ? "有能被23整除的数" : "没有能被23整除的数");
}

14.判断100-200之间有多少个能被23整除的数

@Test
public void work14() {
    int count = 0;
    for (int i = 100; i <= 200; i++) {
        if (i % 23 == 0) {
            count++;
        }
    }
    System.out.println("有" + count + "个能被23整除的数");
}

15.求数组:{1, 3, 5, 7, 9, 2, 4, 6, 8, 0},的最小值,最大值和平均值。

@Test
public void work15() {
    int[] arr = {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};
    int min = arr[0];
    int max = arr[0];
    double sum = 0;

    for (int i = 0, j = arr.length; i < j; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
        sum += arr[i];
    }
    System.out.println("最小值是:" + min);
    System.out.println("最大值是:" + max);
    System.out.println("平均值是:" + (sum / arr.length));
}

16. 输出数字串"18210210122"中的最大数字"8"和最小值数字"0"。

@Test
public void work16() {
    String numStr = "18210210122";
    char[] numArr = numStr.toCharArray();
    Arrays.sort(numArr);
    System.out.println("theMinValue:" + numArr[0]);
    System.out.println("theMaxValue:" + numArr[numArr.length - 1]);
}

17.找出2个已知数组中相同的值:

@Test
public void work17() {
    //    - int[] as = {2, 3, 6, 9, 11, 15, 19, 23, 35};
    //    - int[] bs = {1, 3, 7, 9, 11, 13, 14, 19, 35}。

    int[] as = {2, 3, 6, 9, 11, 15, 19, 23, 35};
    int[] bs = {1, 3, 7, 9, 11, 13, 14, 19, 35};
    for (int e1 : as) {
        for (int e2 : bs) {
            if (e1 == e2) {
                System.out.print(e1 + "\t");
            }
        }
    }
}

18.设计程序,要求可以从1到32随机生成不重复的7个数。

@Test
public void work18() {
    int[] nums = new int[32];
    for (int i = 0; i < nums.length; i++) {
        nums[i] = i + 1;
    }

    // 把数组打乱10000次
    Random random = new Random();
    for (int i = 0; i < 10000; i++) {
        int posA = random.nextInt(32);
        int posB = random.nextInt(32);
        int temp = nums[posA];
        nums[posA] = nums[posB];
        nums[posB] = temp;
    }

    // 取前七个
    for (int i = 0; i < 7; i++) {
        System.out.print(nums[i] + "\t");
    }
}

}

07.22

1.拆读数字(三位数),例如:153翻译成一百五十三。

(1)

    public class Practice1Test {
      @Test
        public void work01() {
        int yourNum = 400;
        String result = "数字无效";
        String numStr = " 一二三四五六七八九";


        // 将接到的数进行判断,如果是三位数,执行,如果不是输出数字无效
        if (yourNum > 99 && yourNum < 1000) {

            // 将三位数拆成三部分 456
            int bai = yourNum / 100;
            int shi = yourNum / 10 % 10;
            int ge = yourNum % 10;
            char baiWei = numStr.charAt(bai);
            char shiWei = numStr.charAt(shi);
            char geWei = numStr.charAt(ge);
            result =
                    shi == 0 && ge == 0 ? baiWei + "百" :
                            shi == 0 && ge != 0 ? baiWei + "百零" + geWei :
                                    shi != 0 && ge == 0 ? baiWei + "百" + shiWei : baiWei + "百" + shiWei + "十" + geWei;
        }
        System.out.println(result);
    }

(2)

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字...");
        int num = scanner.nextInt();
        int baiwei=num/100;
        int shiwei=num%100/10;
        int gewei=num%10;
        String[] arrA = {"零","一","二","三","四","五","六","七","八","九"};
        String result = arrA[baiwei] + "百";
        if (shiwei==0){
            result=result+"零"+arrA[gewei];
        }else{
            result=result+arrA[shiwei]+"十"+arrA[gewei];
        }
        System.out.println(result);

}

2.打印1-2000之间既能被3整除又能被8整除的前15个数,逢5换行。

    @Test
    public void work02() {
        int count = 0;
        for (int i = 1; i <= 2000; i++) {
            if (i % 3 == 0 && i % 8 == 0 && count < 15) {
                System.out.print(i + "\t");
                count++;
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }
    }

3.输出菲波拉契数列的前20项(1,1,2,3,5,8…)。

    @Test
    public void work03() {
        int a = 1, b = 1;
        for (int i = 0; i < 20; i++) {
            System.out.print(a + "\t");
            System.out.print(b + "\t");
            // 新a = 旧a + 旧b
            // 新b = 新a + 旧b
            a = a + b;
            b = a + b;
        }
    }

4.编写程序算出1!+2!+3!+ … +10!的和。(3!标识1* 2* 3)。

    @Test
    public void work04() {
        int sum = 0, factorial = 1;
        for (int i = 1; i <= 10; i++) {
            // 这就是阶乘 1 * 1 * 2 * 3 * 4...
            factorial *= i;
            sum += factorial;
        }
        System.out.println(sum);
    }

5.判断101-200之间有多少个素数,并输出所有素数,除了1和本身不能被任何数整除的数叫素数。

    @Test
    public void work05() {
        int count = 0;
        for (int dividend = 101; dividend <= 200; dividend++) {
            // 除数,每次都从2开始
            int divisor = 2;
            while (dividend > divisor) {
                if (dividend % divisor == 0) {
                    // 它是不是素数
                    break;
                }
                // 每次除数都要增加,从2一直加到被除数。
                divisor++;
            }

            // 如果除数已经增加到被除数的值,说明之前没有能除尽的情况,就是素数
            if (dividend == divisor) {
                count++;
                System.out.println(dividend);
            }
        }
        System.out.println(count + "个素数");
    }

}