Java编程练习题Demo61-Demo70

目录

Demo61 (检查SSN)编写一个程序,提示用户输入一个社保号码,它的格式是DDD-DD-DDDD,其中D是一个数字。你的程序应该判断输入是否合法。

Demo62 (倒排一个字符串)编写一个程序,提示用户输人一个字符串,然后以反序显示该字符串。

Demo63 (商业:检测ISBN-13 ) ISBN-13是一个标识书籍的新标准。它使用13位数字d1d2d3d4d5d6d7d8d9d10d11d12d13。最后一位数字d13,是一个校验和,是使用下面的公式从其他数字中计算出来的:10-(d1 + 3d2 + d3 + 3d4 + d5 + 3d6 + d7 + 3d8 + d9 + 3d10 + d11 + 3d12 )%10,如果校验和为10,将其替换为0。程序应该将输入作为一个字符串读人。

Demo64 (处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符。

Demo65 (对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串中大写字母的数目。

Demo66 (最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀。

Demo67 (求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。使用下面的方法头:public static int sumDigits(long n),例如: sumDigits(234)返回9(2+3+4)。编写程序提示用户输入一个整数,然后显示这个整数所有数字的和。

Demo68 (回文整数)使用下面的方法头编写两个方法,使用reverse方法实现isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。

Demo69 (显示0和1构成的矩阵)编写一个方法,使用下面的方法头显示n xn的矩阵:pub1ic static void printMatrix(int n),每个元素都是随机产生的0或1。编写一个测试程序,提示用户输入n,显示如下所示的n xn矩阵:

Demo70 (检测密码) 一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。编写一个程序,提示用户输入一个密码,如果符合规则,则显示valid Password,否则显示Invalid Password。


Demo61 (检查SSN)编写一个程序,提示用户输入一个社保号码,它的格式是DDD-DD-DDDD,其中D是一个数字。你的程序应该判断输入是否合法。

下面是一个运行示例:

package Exer;

import java.util.Scanner;

public class Demo61 {
    /*
    Demo61 (检查SSN)编写一个程序,提示用户输入一个社保号码,它的格式是DDD-DD-DDDD,其中D是一个数字。
    你的程序应该判断输入是否合法。
     */
    public static void main(String[] args) {
        // String s = "221-12-1233";
        // String[] str = s.split("-");
        // System.out.println(Arrays.toString(str));
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个社保号码:");
        String s = scan.next();
        if(judgeNumValid(s)) {
            System.out.println(s + " 是合法是社保号码!");
        }else {
            System.out.println(s + " 是不合法是社保号码!");
        }
    }

    private static boolean judgeNumValid(String s) {
        String[] str = s.split("-");
        if (str.length == 3) {
            return str[0].length() == 3 && str[1].length() == 2 && str[2].length() == 4;
        }else {
            return false;
        }
    }
}

结果:

Demo62 (倒排一个字符串)编写一个程序,提示用户输人一个字符串,然后以反序显示该字符串。

此题使用暴力拼接法,和StringBuilder两种方法求解:

package Exer;

import java.util.Scanner;

public class Demo62 {
    /*
    Demo62 (倒排一个字符串)编写一个程序,提示用户输人一个字符串,然后以反序显示该字符串。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = scan.next();
        s = reverseStr(s);
        System.out.println(s);
        s = reverseStr1(s);
        System.out.println(s);
    }

    private static String reverseStr(String s) {
        int left = 0, right = s.length() - 1;
        String s1 = "", s2 = "";
        while (left < right) {
            // char temp = s.charAt(left);
            // s.charAt(left) = s.charAt(right); // String对象不可变
            // s.charAt(right) = temp;
            s1 = s.charAt(left) + s1;
            s2 = s2 + s.charAt(right);
            left++;
            right--;
        }
        return s = s2 + (s.length() % 2 == 0 ? "": s.charAt(left)) + s1;
    }

    private static String reverseStr1(String s) {
        StringBuilder stringBuilder = new StringBuilder(s);
        int left = 0, right = s.length() - 1;
        while (left < right) {
            // StringBuilder对象不可变
            stringBuilder.setCharAt(left, s.charAt(right));
            stringBuilder.setCharAt(right, s.charAt(left));
            left++;
            right--;
        }
        return stringBuilder.toString();
    }
}

结果:

Demo63 (商业:检测ISBN-13 ) ISBN-13是一个标识书籍的新标准。它使用13位数字d1d2d3d4d5d6d7d8d9d10d11d12d13。最后一位数字d13,是一个校验和,是使用下面的公式从其他数字中计算出来的:10-(d1 + 3d2 + d3 + 3d4 + d5 + 3d6 + d7 + 3d8 + d9 + 3d10 + d11 + 3d12 )%10,如果校验和为10,将其替换为0。程序应该将输入作为一个字符串读人。

下面是一个运行示例:

package Exer;

import java.util.Scanner;

public class Demo63 {
    /*
    Demo63 (商业:检测ISBN-13 ) ISBN-13是一个标识书籍的新标准。
    它使用13位数字d1d2d3d4d5d6d7d8d9d10d11d12d13。最后一位数字d13,是一个校验和,
    是使用下面的公式从其他数字中计算出来的:
    10-(d1 + 3d2 + d3 + 3d4 + d5+ 3d6 + d7 + 3d8 + d9 + 3d10 + d11 + 3d12 )%10,
    如果校验和为10,将其替换为0。程序应该将输入作为一个字符串读人。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入ISBN的前12位:");
        String s = scan.next();
        if (s.length() < 12) {
            System.out.println("输入的是无效的!");
        } else {
            printISBN(s);
        }
        scan.close();
    }

    private static void printISBN(String s) {
        int[] d = findD(s);
        int sum = 0;
        // System.out.println(Arrays.toString(d));
        for (int i = 0; i < d.length; i++) {
            sum += i % 2 == 0 ? d[i]: 3 * d[i];
        }
        int d13 = 10 - sum % 10;
        System.out.println("ISBN号为:" + s + (d13 == 10 ? 0: d13));
    }

    private static int[] findD(String s) {
        int[] d = new int[12];
        long isbn = Long.parseLong(s);
        for (int i = d.length - 1; i >= 0; i--) {
            d[i] = (int)(isbn % 10);
            isbn /= 10;
        }
        return d;
    }
}

结果:

Demo64 (处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符。

下面是一个运行示例:

import java.util.Scanner;

public class Demo64 {
    /*
    Demo64 (处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String s = scan.nextLine();
        String temp = "";
        for (int i = 0; i < s.length(); i++) {
            if (i % 2 == 0) {
                temp += s.charAt(i);
            }
        }
        System.out.println(temp);
        scan.close();
    }
}

结果:

Demo65 (对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串中大写字母的数目。

package Exer;

import java.util.Scanner;

public class Demo65 {
    /*
    Demo65 (对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串中大写字母的数目。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String str = scan.nextLine();
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {
                count++;
            }
        }
        System.out.println("字符串中大写字母的数目为:" + count);
    }
}

结果:

Demo66 (最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀。

下面是运行示例:

这里使用暴力破解法和,使用startsWith()方法两种方法求解:

package Exer;

import java.util.Scanner;

public class Demo66 {
    /*
    Demo66 (最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入第一个字符串:");
        String s1 = scan.nextLine();
        System.out.print("请输入第二个字符串:");
        String s2 = scan.nextLine();
        commonPrefix(s1, s2);
        commonPrefix1(s1, s2);
    }

    private static void commonPrefix(String s1, String s2) {
        String minStr = s1.length() < s2.length() ? s1 : s2;
        int i;
        for (i = 0; i < minStr.length(); i++) {
            if (s1.charAt(i) != s2.charAt(i)) {
                break;
            }
        }
        if (i == 0) {
            System.out.println(s1 + " and " + s2 + "没有共同前缀!");
        } else {
            System.out.println("共同的前缀是:" + minStr.substring(0, i));
        }
    }

    private static void commonPrefix1(String s1, String s2) {
        String minStr = s1.length() < s2.length() ? s1 : s2;
        String maxStr = s1.length() > s2.length() ? s1 : s2;
        while (!maxStr.startsWith(minStr)) {
            minStr = minStr.substring(0, minStr.length() - 1);
            if (minStr.length() == 0) {
                break;
            }
        }
        if (minStr.isEmpty()) {
            System.out.println(s1 + " and " + s2 + "没有共同前缀!");
        } else {
            System.out.println("共同的前缀是:" + minStr);
        }
    }
}

结果:

Demo67 (求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。使用下面的方法头:public static int sumDigits(long n),例如: sumDigits(234)返回9(2+3+4)。编写程序提示用户输入一个整数,然后显示这个整数所有数字的和。

提示:使用求余操作符 % 提取数字,用除号 / 去掉提取出来的数字。例如:使用234%10(=4)抽取4。然后使用234/10 ( =23 )从234中去掉4。使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。

package Exer;

import java.util.Scanner;

public class Demo67 {
    /*
    (求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。
    使用下面的方法头:public static int sumDigits(long n),
    例如: sumDigits(234)返回9(2+3+4)。编写程序提示用户输入一个整数,然后显示这个整数所有数字的和。
    提示:使用求余操作符 % 提取数字,用除号 / 去掉提取出来的数字。
    例如:使用234%10(=4)抽取4。然后使用234/10 ( =23 )从234中去掉4。
    使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        long num = scan.nextLong();
        int sum = sumDigits(num);
        System.out.println(sum);
    }

    // 循环
    private static int sumDigits(long n) {
        int sum = 0;
        while (n > 0) {
            sum += (int)(n % 10);
            n /= 10;
        }
        return sum;
    }

    // 递归
    private static int sumDigits1(long n) {
        // int sum = 0;
        if (n > 0 && n < 10) {
            return (int)(n % 10);
        }
        return (int)(n % 10) + sumDigits1(n / 10);
    }
}

结果:

Demo68 (回文整数)使用下面的方法头编写两个方法,使用reverse方法实现isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。

// Return the reversal of an integer,i.e.,reverse(456) returns 654

public static int reverse(int number)

//Return true if number is a palindrome

public static boolean isPalindrome(int number)
package Exer;

import java.util.Scanner;

public class Demo68 {
    /*
    (回文整数)使用下面的方法头编写两个方法,使用reverse方法实现isPalindrome。
    如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。
    编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = scan.nextInt();
        if (isPalindrome(num)) {
            System.out.println(num + " 是回文数");
        }else {
            System.out.println(num + " 不是回文数");
        }
        scan.close();
    }

    // Return the reversal of an integer,i.e.,reverse(456) returns 654
    public static int reverse(int number){
        int reverseNum = 0;
        while (number > 0) {
            reverseNum *= 10;
            if (number % 10 == number) {
                return number + reverseNum;
            }else {
                reverseNum += (number % 10);
            }
            number /= 10;
        }
        return reverseNum;
    }
    // Return true if number is a palindrome
    public static boolean isPalindrome(int number) {
        // System.out.println(reverse(number));
        return reverse(number) == number;
    }
}

结果:

Demo69 (显示0和1构成的矩阵)编写一个方法,使用下面的方法头显示n xn的矩阵:pub1ic static void printMatrix(int n),每个元素都是随机产生的0或1。编写一个测试程序,提示用户输入n,显示如下所示的n xn矩阵:

package Exer;

import java.util.Scanner;

public class Demo69 {
    /*
    Demo69 (显示0和1构成的矩阵)编写一个方法,使用下面的方法头显示n x n的矩阵:
    pub1ic static void printMatrix(int n),每个元素都是随机产生的0或1。
    编写一个测试程序,提示用户输入n,显示如下所示的n xn矩阵:
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入要打印一个n x n的矩阵的n:");
        int n = scan.nextInt();
        printMatrix(n);
        scan.close();
    }

    public static void printMatrix(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print((int)(Math.random() * 2) + "  ");
            }
            System.out.println();
        }
    }
}

结果:

Demo70 (检测密码) 一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。编写一个程序,提示用户输入一个密码,如果符合规则,则显示valid Password,否则显示Invalid Password。

假定密码规则如下:

  • 密码必须至少8位字符。
  • 密码仅能包含字母和数字。
  • 密码必须包含至少两个数字。
package Exer;

import java.util.Scanner;

public class Demo70 {
    /*
    (检测密码) 一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。
    编写一个程序,提示用户输入一个密码,如果符合规则,则显示valid Password,否则显示Invalid Password。
    假定密码规则如下:
        1. 密码必须至少8位字符。
        2. 密码仅能包含字母和数字。
        3. 密码必须包含至少两个数字。
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入密码:");
        String password = scan.next();
        if (judgePassword(password)) {
            System.out.println("valid Password!");
        } else {
            System.out.println("Invalid Password!");
        }
        scan.close();
    }

    private static boolean judgePassword(String password) {
        if (password.length() < 8) {
            return false;
        } else {
            int count = 0;
            for (int i = 0; i < password.length(); i++) {
                if (!(Character.isDigit(password.charAt(i)) || Character.isLetter(password.charAt(i)))) {
                    return false;
                } else if (Character.isDigit(password.charAt(i))) {
                    count++;
                }
            }
            return count >= 2;
        }
    }
}

结果:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Golang_HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值