Java基础练习

以下搜集了关于Java基础的一些练习,来巩固对Java的理解。

1、求三个数的最大公约数和最小公倍数。

首先要明确最大公约数和最小公倍数的概念。

最大公约数:

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。

最小公倍数:

两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。

思路:

先分析最大公约数。比如4和6,最大公约数是2,4/2 = 0和6/2=0同时成立,那么可以使用for循环,从1开始除,一直除到最小的数4。

代码:

/*
 * 这个类里面的方法全部为静态的
 */
public class MethodsUtil {

    // 求最大公约数
    public static int getMaxDivisor(int a, int b, int c) {
        // 这个变量用来接收公约数
        int divisor = 0;
        // 获取给定参数中的最小值
        int min = Math.min(Math.min(a, b), c);
        for (int i = 1; i <= min; i++) {
            if (a % i == 0 && b % i == 0 && c % i == 0) {
                // 不断更新公约数的值,那么最后一个是最大的公约数
                divisor = i;
            }
        }
        return divisor;
    }

}

测试:

    public static void main(String[] args) {
        int res = MethodsUtil.getMaxDivisor(9, 18, 999);
        System.out.println("9、18、999的最大公约数是:" + res);
        int res2 = MethodsUtil.getMaxDivisor(7, 18, 42);
        System.out.println("7、18、42的最大公约数是:" + res2);
        int res3 = MethodsUtil.getMaxDivisor(15, 40, 100);
        System.out.println("15、40、100的最大公约数是:" + res3);
    }

控制台:
在这里插入图片描述
没问题。

然后看最小公倍数:比如4和5的最小公倍数是4*5=20,2和4的最小公倍数是4,使用for循环,从最小的数除起,最大的数是两个数的乘积。

代码:

    // 求最小公倍数
    public static int getMinMultiple(int a, int b, int c) {
        int multiple = 0;
        // 获取给定参数中的最小值
        int min = Math.min(Math.min(a, b), c);
        // 除数的最大值
        int max = a * b * c;
        for (int i = min; i <= max; i++) {
            if (i % a == 0 && i % b == 0 && i % c == 0) {
                multiple = i;
                // 最小公倍数找到,可以直接跳出了
                break;
            }
        }
        return multiple;
    }

测试:

    public static void main(String[] args) {
        int res = MethodsUtil.getMinMultiple(2, 4, 8);
        System.out.println("2、4、8的最小公倍数是:" + res);
        int res2 = MethodsUtil.getMinMultiple(4, 5, 7);
        System.out.println("4、5、7的最小公倍数是:" + res2);
        int res3 = MethodsUtil.getMinMultiple(14, 5, 7);
        System.out.println("14、5、7的最小公倍数是:" + res3);
    }

控制台:
在这里插入图片描述
对于n个数的最小公倍数、最大公约数,可以仿照此方法改进,原理相同。

2、用户输入一个数字,控制台反转这个数字之后,返回给用户。

思路:

可以考虑StringBuilder提供的reserve方法,有其他的方法,这里我就用这种了。

代码:

    // 反转一个数字
    public static long reserveNumber(long a) {
        // 先转为String
        String res = Long.toString(a);
        StringBuilder sb = new StringBuilder(res);
        // 反转
        sb.reverse();
        // 再转回int
        Long result = Long.parseLong(sb.toString());
        return result;
    }

测试:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        if (sc.hasNextLong()) {
            long res = sc.nextLong();
            System.out.println("输入的数字是:" + res);
            // 反转
            long res2 = MethodsUtil.reserveNumber(res);
            System.out.println("该数反转后是:" + res2);
        }
    }

控制台:
在这里插入图片描述
OK,没问题。

3、从控制台接收一个字符串,将字符串中的大写字母转为小写,小写字母转为大写。

思路:

直接使用包装类Character提供的方法即可实现。

代码:

    // 字符串中的大写字母转小写,小写转为大写
    public static String transferLetter(String s) {
        // 将串转为字符数组
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            // 判断字符是不是大写字母
            if (Character.isUpperCase(chs[i])) {
                chs[i] = Character.toLowerCase(chs[i]);
            } else if (Character.isLowerCase(chs[i])) {
                chs[i] = Character.toUpperCase(chs[i]);
            }
        }
        // 重新构建字符串
        String res = new String(chs);
        return res;
    }

测试:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个串:");
        if (sc.hasNext()) {
            String res = sc.next();
            System.out.println("输入的原串是:" + res);
            // 转换
            String res2 = MethodsUtil.transferLetter(res);
            System.out.println("转换后的新串是:" + res2);
        }
    }

控制台:
在这里插入图片描述
OK,没问题。

4、输入5个整数x,y,z,m,n,请把这5个数由小到大输出。 例如输入:1,3,2,4,6 输出 1,2,3,4,6。

思路:

考虑使用数组来实现。

代码:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer[] nums = new Integer[5];
        for (int i = 1; i <= 5; i++) {
            System.out.println("请输入第" + i + "个数:");
            if (sc.hasNextInt()) {
                nums[i - 1] = sc.nextInt();
            }
        }
        // 排序
        Arrays.sort(nums);
        System.out.println("升序排列:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i] + "\t");
        }
    }

执行,控制台:
在这里插入图片描述

5、控制台接收5个人的成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示,输出5个人的成绩等级,控制台只允许接收0-100之间的分数。

思路:

考虑使用循环加条件语句来实现。

代码:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int i = 1;
        boolean tag = true;
        do {
            System.out.println("请输入第" + i + "个同学的成绩:");
            if (sc.hasNextInt()) {
                int res = sc.nextInt();
                if (res < 0 || res > 100) {
                    System.out.println("成绩不合法,请重新输入!");
                } else {
                    i++;
                    if (res < 60) {
                        System.out.println("该同学的成绩为C等!");
                    } else if (res < 90) {
                        System.out.println("该同学的成绩为B等!");
                    } else {
                        System.out.println("该同学的成绩为A等!");
                    }
                }
            }
            if (i > 5) {
                tag = false;
            }
        } while (tag);

    }

控制台:
在这里插入图片描述

6、输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。

思路:

考虑使用包装类Character来实现,但是注意,控制台允许输入空格的。

代码:

    // 统计字符串中英文字母、空格、数字和其它字符的个数。
    public static void count(String s) {
        int letter = 0, whiteSpace = 0, digit = 0, others = 0;
        // 转为字符数组
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            if (Character.isLetter(chs[i])) {
                letter++;
            } else if (Character.isWhitespace(chs[i])) {
                whiteSpace++;
            } else if (Character.isDigit(chs[i])) {
                digit++;
            } else {
                others++;
            }
        }
        System.out.println("输入串的长度为:" + s.length());
        System.out.println("其中字母个数:" + letter);
        System.out.println("其中空格个数:" + whiteSpace);
        System.out.println("其中数字个数:" + digit);
        System.out.println("其它字符个数:" + others);
    }

测试:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        if (sc.hasNextLine()) {
            String res = sc.nextLine();
            MethodsUtil.count(res);
        }
    }

执行:
在这里插入图片描述
24 + 3 + 15 + 3 = 45没错,注意,汉字它是当做字母处理的。

7、图形打印输出,控制台打印下面几个图形。

   *	
  ***
 *****
*******

思考:

使用3层循环,最外层控制行数,里面两层控制打印空格和星号。
第1行:3个空格1个星号。
第2行:2个空格3个星号。
第3行:1个空格5个星号。
第4行:0个空格7个星号。

规律是:第i行,2i-1个星号,4-i个空格。

代码:

    public static void main(String[] args) {

        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = 4 - i; j > 0; j--) {// 先输出空格
                System.out.print(" ");
            }
            for (int k = 2 * i - 1; k > 0; k--) {// 然后输出星号
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
输出以下图形:

*******
 *****  
  ***  
   * 

思路:

使用3层for循环实现。
第1行:0个空格7个星号。
第2行:1个空格5个星号。
第3行:2个空格3个星号。
第4行:3个空格1个星号。

规律:第i行,i-1个空格,9-2i个星号。

代码:

    public static void main(String[] args) {

        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = i - 1; j > 0; j--) {// 先输出空格
                System.out.print(" ");
            }
            for (int k = 9 - 2 * i; k > 0; k--) {// 然后输出星号
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
打印下面图形:

   *
  ***
 *****		 
*******
 *****
  ***
   *

思路:

拆分成上下两个部分,上面4行,下面3行,和刚才的差不多。
上面不变,下面稍微变一下:
第1行:1个空格5个星号。
第2行:2个空格3个星号。
第3行:3个空格1个星号。
规律:第i行,i个空格,7-2i个星号。

代码:

    public static void main(String[] args) {

        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = 4 - i; j > 0; j--) {// 先输出空格
                System.out.print(" ");
            }
            for (int k = 2 * i - 1; k > 0; k--) {// 然后输出星号
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i = 1; i <= 3; i++) {// 控制行数
            for (int j = i; j > 0; j--) {// 先输出空格
                System.out.print(" ");
            }
            for (int k = 7 - 2 * i; k > 0; k--) {// 然后输出星号
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
输出以下图形:

*
**
***
****
*****

思路:

两层循环就行了,比较简单。

规律:第i行,i个星号。

代码:

    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {// 控制行数
            for (int j = i; j > 0; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
输出以下图形:

*****
****
***
**
*

思路:

两层循环。规律:第i行,6-i个星号。

代码:

    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {// 控制行数
            for (int j = 6 - i; j > 0; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
输出以下图形:

*
**
*** 
****
*****
****
***
** 
*

拆分为上下两个部分,这里直接写了。

代码:

    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {// 控制行数
            for (int j = i; j > 0; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = 5 - i; j > 0; j--) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述
打印以下图形:

	*
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
	* 

思路:分为上下两个部分。

上半部分:
第1行:4个空格,1个星号。
第2行:3个空格,1个星号,1个空格,1个星号。
第3行:2个空格,1个星号,3个空格,1个星号。
第4行:1个空格,1个星号,5个空格,1个星号。
第5行:0个空格,1个星号,7个空格,1个星号。
规律:第1行特殊处理,其他4行:第i行,5-i个空格,1个星号,2i-3个空格,1个星号。
代码:

        for (int i = 1; i <= 5; i++) {// 控制行数
            for (int j = 5 - i; j > 0; j--) {// 先打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            if (i == 1) {
                System.out.println();
                continue;
            }
            for (int k = 2 * i - 3; k > 0; k--) {// 再打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            System.out.println();
        }

效果:
在这里插入图片描述
下半部分:
第1行:1个空格,1个星号,5个空格,1个星号。
第2行:2个空格,1个星号,3个空格,1个星号。
第3行:3个空格,1个星号,1个空格,1个星号。
第4行:4个空格,1个星号。
规律:第4行特殊处理,其他行:第i行,i个空格,1个星号,7-2i个空格,1个星号。

代码:

        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = i; j > 0; j--) {// 先打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            if (i == 4) {
                System.out.println();
                break;
            }
            for (int k = 7 - 2 * i; k > 0; k--) {// 再打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            System.out.println();
        }

效果:
在这里插入图片描述
完整的代码如下:

    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {// 控制行数
            for (int j = 5 - i; j > 0; j--) {// 先打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            if (i == 1) {
                System.out.println();
                continue;
            }
            for (int k = 2 * i - 3; k > 0; k--) {// 再打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            System.out.println();
        }
        for (int i = 1; i <= 4; i++) {// 控制行数
            for (int j = i; j > 0; j--) {// 先打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            if (i == 4) {
                System.out.println();
                break;
            }
            for (int k = 7 - 2 * i; k > 0; k--) {// 再打空格
                System.out.print(" ");
            }
            System.out.print("*");// 打1个星号
            System.out.println();
        }
    }

执行,控制台:
在这里插入图片描述
输出以下图形:

* * * * * * * * * *
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * * 
* * * * * * * * * *
* * * * * * * * * * 

注意,是1个星号1个空格,打印10行,每行10个星号。

代码:

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {// 控制行数
            for (int j = 1; j <= 10; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述

8、打印9x9乘法口诀表。

思路:两个for循环即可实现。

代码:

    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {// 控制行数
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "x" + i + "=" + (i * j) + " ");
            }
            System.out.println();
        }
    }

控制台:
在这里插入图片描述

9、给一个不多于5位的正整数,要求:
一、求它是几位数。
二、逆序打印出各位数字。

代码:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean tag = true;
        System.out.println("请输入一个不超过5位的整数:");
        do {
            if (sc.hasNextInt()) {
                int res = sc.nextInt();
                String s = Integer.toString(res);
                if (s.length() > 5) {
                    System.out.println("数字位数超过了5位,请重新输入!");
                } else {
                    System.out.println("输入的是" + s.length() + "位数!");
                    StringBuilder sb = new StringBuilder(s);
                    sb.reverse();
                    System.out.println("你输入的是:" + s + ",反转后是:" + sb.toString());
                    tag = false;
                }
            }
        } while (tag);
    }

控制台:
在这里插入图片描述

10、有一个已经升序排好序的数组。现输入3个数,要求按原来的规律将它们插入数组中。

代码:

    public static void main(String[] args) {
        int[] num = {1, 3, 34, 45, 67, 567, 697 };
        System.out.println("原数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
        System.out.println();
        System.out.println("------------------------------------------------------");
        // 数组扩容3位
        int[] num2 = Arrays.copyOf(num, num.length + 3);
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入第" + i + "个整数:");
            if (sc.hasNextInt()) {
                int res = sc.nextInt();
                // 扩容后的默认元素是0,用输入的数代替
                num2[num2.length - i] = res;
            }
        }
        // 数组排序
        Arrays.sort(num2);
        System.out.println("新的数组如下:");
        for (int i = 0; i < num2.length; i++) {
            System.out.print(num2[i] + "\t");
        }
    }

控制台:
在这里插入图片描述

11、将一个数组逆序输出。

用反转排序算法就可以了。

代码:

    // 数组反转
    public static int[] reserveArray(int[] nums) {
        for (int i = 0; i < nums.length / 2; i++) {
            // 元素交换
            int temp = nums[nums.length - 1 - i];
            nums[nums.length - 1 - i] = nums[i];
            nums[i] = temp;
        }
        return nums;
    }

测试:

    public static void main(String[] args) {
        int[] num = {1, 3, 34, 45, 67, 567, 697 };
        System.out.println("原数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
        System.out.println();
        System.out.println("----------------------------------------");
        // 反转
        MethodsUtil.reserveArray(num);
        System.out.println("反转后的数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
    }

控制台:
在这里插入图片描述

12、取一个整数a从右端开始的4~7位。

使用字符串中的substring方法截取就可以了。注意的是,这个整数至少有7位,而且截取是从右边开始的,那么索引位应该是:a.length-7到a.length-4,这样的话最后一位取不到,所以应该是a.length-7到a.length-3。

代码:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        boolean tag = true;
        do {
            System.out.println("请输入一个至少7位的整数:");
            if (in.hasNextLong()) {
                long res = in.nextLong();
                String s = Long.toString(res);
                if (s.length() < 7) {
                    System.out.println("数字的位数不够7位,请重新输入!");
                } else {
                    // 开始截取
                    String result = s.substring(s.length() - 7, s.length() - 3);
                    System.out.println("原数字是:" + s);
                    System.out.println("截取后的数字是:" + result);
                    tag = false;
                }
            }
        } while (tag);
    }

控制台:
在这里插入图片描述

13、给定数组,最大元素与第一个元素交换,最小元素与最后一个元素交换,输出数组。

代码:

    /*
          * 数组中的最大元素和第一个元素交换位置, 
          * 最小元素 最小元素和最后一个元素交换位置
     */
    public static void changeLocation(int[] nums) {
        // 复制一份数组
        int[] nums2 = Arrays.copyOf(nums, nums.length);
        // 排序获取最大、最小值
        Arrays.sort(nums2);
        int max = nums2[nums2.length - 1];
        int min = nums2[0];
        // 获取最大值和最小值的索引
        int max_index = getIndexFromArray(nums, max);
        int min_index = getIndexFromArray(nums, min);
        // 交换最大值和第一个元素
        int temp = nums[0];
        nums[0] = nums[max_index];
        nums[max_index] = temp;
        // 交换最小值和最后一个元素
        int temp2 = nums[nums.length - 1];
        nums[nums.length - 1] = nums[min_index];
        nums[min_index] = temp2;
    }

    // 定义一个私有方法,获取数组中元素的下标值
    private static int getIndexFromArray(int[] nums, int value) {
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == value) {
                return i;
            }
        }
        return -1;
    }

测试:

    public static void main(String[] args) {
        int[] num = {132, 23, 54, 65, 8, 10, 435, 4563, 212 };
        System.out.println("原数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
        System.out.println();
        System.out.println("-------------------------------------");
        // 数组元素交换
        MethodsUtil.changeLocation(num);
        System.out.println("交换后的数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + "\t");
        }
    }

控制台:
在这里插入图片描述

14、计算字符串中子串出现的次数。

思路:

将原字符串中的子串用空符替换掉,然后用原串长度减去新串长度,再除以子串的长度。

代码:

    // 统计字符串中子串出现的次数
    public static int countTwice(String str, String s) {
        // 子串用空符替换
        String res = str.replaceAll(s, "");
        int count = (str.length() - res.length()) / s.length();
        return count;
    }

测试:

    public static void main(String[] args) {
        String s = "dabkyczlkashqyczasldlayczawldayczakdafycz88宏大的ycz";
        int count = MethodsUtil.countTwice(s, "ycz");
        System.out.println("子串ycz一共出现了:" + count + "次");
    }

控制台:
在这里插入图片描述
没问题。

15、有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括学生号,姓名,三门课成绩)
计算出平均成绩,将原有的数据和计算出的平均分数存放在桌面的"student.txt"中。

代码:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 5; i++) {
            System.out.println("开始录入第" + i + "个学生的成绩!");
            System.out.println("请输入第" + i + "个学生的姓名:");
            if(in.hasNext()) {
                String name  = in.next();
                System.out.println("请输入第" + i + "个学生的学号:");
                String code = in.next();
                System.out.println("请输入第" + i + "个学生的语文成绩:");
                int chinese = in.nextInt();
                System.out.println("请输入第" + i + "个学生的数学成绩:");
                int math = in.nextInt();
                System.out.println("请输入第" + i + "个学生的英语成绩:");
                int english = in.nextInt();
                int avg = Math.round((chinese + math + english) / 3);
                sb.append("姓名:").append(name).append(",").append("学号:").append(code)
                .append(",").append("语文:").append(chinese).append(",")
                .append("数学:").append(math).append(",")
                .append("英语:").append(english).append(",平均成绩:").append(avg).append("\n");
            }
        }
        //开始写入内容
        File file = new File("F:/Users/Administrator/Desktop/student.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
                //写入的内容转为字节数组
                byte []bys = sb.toString().getBytes("utf-8");
                OutputStream os = new FileOutputStream(file);
                os.write(bys);
                System.out.println("写入完毕,请查看文件!");
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            } 
        }
        
    }

控制台:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
控制台提示写完了,查看桌面:
在这里插入图片描述
查看这个文件:
在这里插入图片描述
没问题,最后一个的成绩不小心输的有问题,但是不影响结果,懒得改了。

16、用 while 循环,计算 1~200 之间所有 3 的倍数之和。

挺简单,直接上代码:

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int res = 0;
        System.out.println("3的倍数如下:");
        while (i <= 200) {
            if (i % 3 == 0) {
                res++;
                System.out.print(i + "\t");
                sum += i;
                if (res % 10 == 0) {
                    System.out.println();
                }
            }
            i++;
        }
        System.out.println();
        System.out.println("1到200之间所有3的倍数之和为:" + sum);
    }

控制台:
在这里插入图片描述

17、已知 XYZ+YZZ=532,其中,X、Y、Z 为数字,编程求出 X、Y 和 Z 的值。

思路:

像解方程那样:X + Y = 5,Y + Z = 3,Z + Z =2,同时满足这三个条件。

代码:

    public static void main(String[] args) {
        for (int x = 0; x <= 5; x++) {
            for (int y = 0; y <= 3; y++) {
                for (int z = 0; z <= 2; z++) {
                    if (x + y == 5 && y + z == 3 && z + z == 2) {
                        System.out.println("X的值是:" + x);
                        System.out.println("Y的值是:" + y);
                        System.out.println("Z的值是:" + z);
                    }
                }
            }
        }
    }

控制台:
在这里插入图片描述
321 + 211 = 532,结果正确。

18、一个猜拳游戏,从控制台输入石头、剪刀、布,后台随机生成对应和输入的做比较,看看谁能赢,输,和平局。

考虑用随机数,生成3个数分别代表剪刀、石头、布。

代码:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Random ran = new Random();
        // 随机生成0,1,2
        // 制定规则:0代表石头,1代表剪刀,2代表布
        for (int i = 1; i <= 10; i++) {
            int res = ran.nextInt(3);
            System.out.println("请输入0、1、2三个数字中的一个:");
            if (in.hasNextInt()) {
                int res2 = in.nextInt();
                if (res == 0) {
                    if (res2 == 0) {
                        System.out.println("系统出的是石头,你出的也是石头,第" + i + "轮平局!");
                    } else if (res2 == 1) {
                        System.out.println("系统出的是石头,你出的是剪刀,第" + i + "轮你输了!");
                    } else if (res2 == 2) {
                        System.out.println("系统出的是石头,你出的是布,第" + i + "轮你赢了!");
                    }
                }
                if (res == 1) {
                    if (res2 == 0) {
                        System.out.println("系统出的是剪刀,你出的是石头,第" + i + "轮你赢了!");
                    } else if (res2 == 1) {
                        System.out.println("系统出的是剪刀,你出的也是剪刀,第" + i + "轮平局!");
                    } else if (res2 == 2) {
                        System.out.println("系统出的是剪刀,你出的是布,第" + i + "轮你输了!");
                    }
                }
                if (res == 2) {
                    if (res2 == 0) {
                        System.out.println("系统出的是布,你出的是石头,第" + i + "轮你输了!");
                    } else if (res2 == 1) {
                        System.out.println("系统出的是布,你出的是剪刀,第" + i + "轮你赢了!");
                    } else if (res2 == 2) {
                        System.out.println("系统出的是布,你出的也是布,第" + i + "轮平局!");
                    }
                }
            }
        }

    }

控制台:
在这里插入图片描述
其实在用户输入数字的时候应该做一下判断,如果用户输入的数不是0、1、2中的任何一个,应该处理的,这里没判断,应该要加,这样更严谨。

19、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。(例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。)

代码:

    public static void main(String[] args) {
        // 百位不能是0
        for (int i = 1; i <= 9; i++) {
            // 十位和各位可以是0
            for (int j = 0; j <= 9; j++) {
                for (int k = 0; k <= 9; k++) {
                    if (i * i * i + j * j * j + k * k * k == i * 100 + j * 10 + k) {
                        System.out.println("水仙花数:" + (i * 100 + j * 10 + k));
                    }
                }
            }
        }
    }

控制台:
在这里插入图片描述

20、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。

代码:

    // 分解质因数
    public static String resolveNum(int a) {
        StringBuilder sb = new StringBuilder();
        for (int i = 2; i <= a; i++) {
            if (a % i == 0) {
                sb.append(i).append(" * ");
                a /= i;
                i--;
            }
        }
        // 删除最后几个多余的字符
        sb.delete(sb.length() - 3, sb.length() - 1);
        return sb.toString();
    }

测试:

    public static void main(String[] args) {
        System.out.println("80 = " + MethodsUtil.resolveNum(80));
    }

控制台:
在这里插入图片描述
结果没问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值