• 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是一个数字。你的程序应该判断输入是否合法。

    下面是一个运行示例:

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo61 {
    4. /*
    5. Demo61 (检查SSN)编写一个程序,提示用户输入一个社保号码,它的格式是DDD-DD-DDDD,其中D是一个数字。
    6. 你的程序应该判断输入是否合法。
    7. */
    8. public static void main(String[] args) {
    9. // String s = "221-12-1233";
    10. // String[] str = s.split("-");
    11. // System.out.println(Arrays.toString(str));
    12. Scanner scan = new Scanner(System.in);
    13. System.out.print("请输入一个社保号码:");
    14. String s = scan.next();
    15. if(judgeNumValid(s)) {
    16. System.out.println(s + " 是合法是社保号码!");
    17. }else {
    18. System.out.println(s + " 是不合法是社保号码!");
    19. }
    20. }
    21. private static boolean judgeNumValid(String s) {
    22. String[] str = s.split("-");
    23. if (str.length == 3) {
    24. return str[0].length() == 3 && str[1].length() == 2 && str[2].length() == 4;
    25. }else {
    26. return false;
    27. }
    28. }
    29. }

    结果:

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

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

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo62 {
    4. /*
    5. Demo62 (倒排一个字符串)编写一个程序,提示用户输人一个字符串,然后以反序显示该字符串。
    6. */
    7. public static void main(String[] args) {
    8. Scanner scan = new Scanner(System.in);
    9. System.out.println("请输入一个字符串:");
    10. String s = scan.next();
    11. s = reverseStr(s);
    12. System.out.println(s);
    13. s = reverseStr1(s);
    14. System.out.println(s);
    15. }
    16. private static String reverseStr(String s) {
    17. int left = 0, right = s.length() - 1;
    18. String s1 = "", s2 = "";
    19. while (left < right) {
    20. // char temp = s.charAt(left);
    21. // s.charAt(left) = s.charAt(right); // String对象不可变
    22. // s.charAt(right) = temp;
    23. s1 = s.charAt(left) + s1;
    24. s2 = s2 + s.charAt(right);
    25. left++;
    26. right--;
    27. }
    28. return s = s2 + (s.length() % 2 == 0 ? "": s.charAt(left)) + s1;
    29. }
    30. private static String reverseStr1(String s) {
    31. StringBuilder stringBuilder = new StringBuilder(s);
    32. int left = 0, right = s.length() - 1;
    33. while (left < right) {
    34. // StringBuilder对象不可变
    35. stringBuilder.setCharAt(left, s.charAt(right));
    36. stringBuilder.setCharAt(right, s.charAt(left));
    37. left++;
    38. right--;
    39. }
    40. return stringBuilder.toString();
    41. }
    42. }

    结果:

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

    下面是一个运行示例:

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo63 {
    4. /*
    5. Demo63 (商业:检测ISBN-13 ) ISBN-13是一个标识书籍的新标准。
    6. 它使用13位数字d1d2d3d4d5d6d7d8d9d10d11d12d13。最后一位数字d13,是一个校验和,
    7. 是使用下面的公式从其他数字中计算出来的:
    8. 10-(d1 + 3d2 + d3 + 3d4 + d5+ 3d6 + d7 + 3d8 + d9 + 3d10 + d11 + 3d12 )%10,
    9. 如果校验和为10,将其替换为0。程序应该将输入作为一个字符串读人。
    10. */
    11. public static void main(String[] args) {
    12. Scanner scan = new Scanner(System.in);
    13. System.out.print("请输入ISBN的前12位:");
    14. String s = scan.next();
    15. if (s.length() < 12) {
    16. System.out.println("输入的是无效的!");
    17. } else {
    18. printISBN(s);
    19. }
    20. scan.close();
    21. }
    22. private static void printISBN(String s) {
    23. int[] d = findD(s);
    24. int sum = 0;
    25. // System.out.println(Arrays.toString(d));
    26. for (int i = 0; i < d.length; i++) {
    27. sum += i % 2 == 0 ? d[i]: 3 * d[i];
    28. }
    29. int d13 = 10 - sum % 10;
    30. System.out.println("ISBN号为:" + s + (d13 == 10 ? 0: d13));
    31. }
    32. private static int[] findD(String s) {
    33. int[] d = new int[12];
    34. long isbn = Long.parseLong(s);
    35. for (int i = d.length - 1; i >= 0; i--) {
    36. d[i] = (int)(isbn % 10);
    37. isbn /= 10;
    38. }
    39. return d;
    40. }
    41. }

    结果:

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

    下面是一个运行示例:

    1. import java.util.Scanner;
    2. public class Demo64 {
    3. /*
    4. Demo64 (处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符。
    5. */
    6. public static void main(String[] args) {
    7. Scanner scan = new Scanner(System.in);
    8. System.out.print("请输入一个字符串:");
    9. String s = scan.nextLine();
    10. String temp = "";
    11. for (int i = 0; i < s.length(); i++) {
    12. if (i % 2 == 0) {
    13. temp += s.charAt(i);
    14. }
    15. }
    16. System.out.println(temp);
    17. scan.close();
    18. }
    19. }

    结果:

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

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo65 {
    4. /*
    5. Demo65 (对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串中大写字母的数目。
    6. */
    7. public static void main(String[] args) {
    8. Scanner scan = new Scanner(System.in);
    9. System.out.print("请输入一个字符串:");
    10. String str = scan.nextLine();
    11. int count = 0;
    12. for (int i = 0; i < str.length(); i++) {
    13. if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {
    14. count++;
    15. }
    16. }
    17. System.out.println("字符串中大写字母的数目为:" + count);
    18. }
    19. }

    结果:

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

    下面是运行示例:

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

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo66 {
    4. /*
    5. Demo66 (最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀。
    6. */
    7. public static void main(String[] args) {
    8. Scanner scan = new Scanner(System.in);
    9. System.out.print("请输入第一个字符串:");
    10. String s1 = scan.nextLine();
    11. System.out.print("请输入第二个字符串:");
    12. String s2 = scan.nextLine();
    13. commonPrefix(s1, s2);
    14. commonPrefix1(s1, s2);
    15. }
    16. private static void commonPrefix(String s1, String s2) {
    17. String minStr = s1.length() < s2.length() ? s1 : s2;
    18. int i;
    19. for (i = 0; i < minStr.length(); i++) {
    20. if (s1.charAt(i) != s2.charAt(i)) {
    21. break;
    22. }
    23. }
    24. if (i == 0) {
    25. System.out.println(s1 + " and " + s2 + "没有共同前缀!");
    26. } else {
    27. System.out.println("共同的前缀是:" + minStr.substring(0, i));
    28. }
    29. }
    30. private static void commonPrefix1(String s1, String s2) {
    31. String minStr = s1.length() < s2.length() ? s1 : s2;
    32. String maxStr = s1.length() > s2.length() ? s1 : s2;
    33. while (!maxStr.startsWith(minStr)) {
    34. minStr = minStr.substring(0, minStr.length() - 1);
    35. if (minStr.length() == 0) {
    36. break;
    37. }
    38. }
    39. if (minStr.isEmpty()) {
    40. System.out.println(s1 + " and " + s2 + "没有共同前缀!");
    41. } else {
    42. System.out.println("共同的前缀是:" + minStr);
    43. }
    44. }
    45. }

    结果:

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

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

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo67 {
    4. /*
    5. (求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。
    6. 使用下面的方法头:public static int sumDigits(long n),
    7. 例如: sumDigits(234)返回9(2+3+4)。编写程序提示用户输入一个整数,然后显示这个整数所有数字的和。
    8. 提示:使用求余操作符 % 提取数字,用除号 / 去掉提取出来的数字。
    9. 例如:使用234%10(=4)抽取4。然后使用234/10 ( =23 )从234中去掉4。
    10. 使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。
    11. */
    12. public static void main(String[] args) {
    13. Scanner scan = new Scanner(System.in);
    14. System.out.println("请输入一个整数:");
    15. long num = scan.nextLong();
    16. int sum = sumDigits(num);
    17. System.out.println(sum);
    18. }
    19. // 循环
    20. private static int sumDigits(long n) {
    21. int sum = 0;
    22. while (n > 0) {
    23. sum += (int)(n % 10);
    24. n /= 10;
    25. }
    26. return sum;
    27. }
    28. // 递归
    29. private static int sumDigits1(long n) {
    30. // int sum = 0;
    31. if (n > 0 && n < 10) {
    32. return (int)(n % 10);
    33. }
    34. return (int)(n % 10) + sumDigits1(n / 10);
    35. }
    36. }

    结果:

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

    1. // Return the reversal of an integer,i.e.,reverse(456) returns 654
    2. public static int reverse(int number)
    3. //Return true if number is a palindrome
    4. public static boolean isPalindrome(int number)
    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo68 {
    4. /*
    5. (回文整数)使用下面的方法头编写两个方法,使用reverse方法实现isPalindrome。
    6. 如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。
    7. 编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。
    8. */
    9. public static void main(String[] args) {
    10. Scanner scan = new Scanner(System.in);
    11. System.out.print("请输入一个整数:");
    12. int num = scan.nextInt();
    13. if (isPalindrome(num)) {
    14. System.out.println(num + " 是回文数");
    15. }else {
    16. System.out.println(num + " 不是回文数");
    17. }
    18. scan.close();
    19. }
    20. // Return the reversal of an integer,i.e.,reverse(456) returns 654
    21. public static int reverse(int number){
    22. int reverseNum = 0;
    23. while (number > 0) {
    24. reverseNum *= 10;
    25. if (number % 10 == number) {
    26. return number + reverseNum;
    27. }else {
    28. reverseNum += (number % 10);
    29. }
    30. number /= 10;
    31. }
    32. return reverseNum;
    33. }
    34. // Return true if number is a palindrome
    35. public static boolean isPalindrome(int number) {
    36. // System.out.println(reverse(number));
    37. return reverse(number) == number;
    38. }
    39. }

    结果:

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

    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo69 {
    4. /*
    5. Demo69 (显示0和1构成的矩阵)编写一个方法,使用下面的方法头显示n x n的矩阵:
    6. pub1ic static void printMatrix(int n),每个元素都是随机产生的0或1。
    7. 编写一个测试程序,提示用户输入n,显示如下所示的n xn矩阵:
    8. */
    9. public static void main(String[] args) {
    10. Scanner scan = new Scanner(System.in);
    11. System.out.print("请输入要打印一个n x n的矩阵的n:");
    12. int n = scan.nextInt();
    13. printMatrix(n);
    14. scan.close();
    15. }
    16. public static void printMatrix(int n) {
    17. for (int i = 0; i < n; i++) {
    18. for (int j = 0; j < n; j++) {
    19. System.out.print((int)(Math.random() * 2) + " ");
    20. }
    21. System.out.println();
    22. }
    23. }
    24. }

    结果:

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

    假定密码规则如下:

    • 密码必须至少8位字符。
    • 密码仅能包含字母和数字。
    • 密码必须包含至少两个数字。
    1. package Exer;
    2. import java.util.Scanner;
    3. public class Demo70 {
    4. /*
    5. (检测密码) 一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。
    6. 编写一个程序,提示用户输入一个密码,如果符合规则,则显示valid Password,否则显示Invalid Password。
    7. 假定密码规则如下:
    8. 1. 密码必须至少8位字符。
    9. 2. 密码仅能包含字母和数字。
    10. 3. 密码必须包含至少两个数字。
    11. */
    12. public static void main(String[] args) {
    13. Scanner scan = new Scanner(System.in);
    14. System.out.println("请输入密码:");
    15. String password = scan.next();
    16. if (judgePassword(password)) {
    17. System.out.println("valid Password!");
    18. } else {
    19. System.out.println("Invalid Password!");
    20. }
    21. scan.close();
    22. }
    23. private static boolean judgePassword(String password) {
    24. if (password.length() < 8) {
    25. return false;
    26. } else {
    27. int count = 0;
    28. for (int i = 0; i < password.length(); i++) {
    29. if (!(Character.isDigit(password.charAt(i)) || Character.isLetter(password.charAt(i)))) {
    30. return false;
    31. } else if (Character.isDigit(password.charAt(i))) {
    32. count++;
    33. }
    34. }
    35. return count >= 2;
    36. }
    37. }
    38. }

    结果:

  • 相关阅读:
    RustDay06------Exercise[81-90]
    从 PyTorch DDP 到 Accelerate 到 Trainer,轻松掌握分布式训练
    基于微信JAVA后台校园小程序系统设计与实现 开题报告
    linux基础(2)
    Nginx部署history路由模式的vue项⽬
    【前端三栏布局总结】常见的前端三栏布局有哪些
    基于JAVA天津城建大学校友录管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    SQL之窗口函数
    什么是Jmeter ?Jmeter使用的原理步骤是什么?
    Varnish 6-2-0-porting-guide
  • 原文地址:https://blog.csdn.net/weixin_51612062/article/details/126068234