当前位置:数据分析 > 罗马数字转换(Java字符串练习)

罗马数字转换(Java字符串练习)

  • 发布:2023-09-21 11:22

罗马数字转换(Java字符串练习)

【题目描述】

键盘录入一个字符串

要求1:长度为小于等于9

要求2:只能是数字

将内容变成罗马数字

下面是阿拉伯数字跟罗马数字的对比关系:

I-1,II-2,III-3,IV-4,V-5,VI-6,VII-7,VIII-8,IX-9

注意点:

罗马数字里面没有0的

如果键盘录入的数字包含0,可以变成“ ”(长度为0的字符串)

【思路】

根据要求,逐步完成

  • 对键入的字符串进行判断,判断是否符合要求
  • 将符合要求的字符串进行转换,转化成罗马数字
  • 将转换完的罗马数字进行输出

【代码实现】

第一步,键盘录入字符串,并且将字符串进行判断,判断字符串是否符合只能是数字并且长度小于等于9的要求。如果没有满足要求,则需要重新输入并进行判断

        Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}

这里用了一个方法来检查输入的字符串是否符合要求,当字符串符合要求就会返回布尔型的true给flag,如果不符合要求就返回布尔型的false给flag,然后根据flag的值来进行判断。

注意while(true)这个结构主要就是让输入错误的字符串后不断要求引导输入,直到输入的字符串符合要求。引导重复输入的时候要注意把输入语句放到while(true)循环里面,否则就会出现输入字符串错误后不断提示“不符合规则,请重新输入”的情况。而str这个变量定义的时候要定义到while(true)外面,因为str不是while(true)的局部变量。str要在整个程序中发挥作用。

下面就是对字符串进行检查的一个方法,首先判断了字符串的长度是不是小于等于9,然后判断字字符串的中的每一个字符是否都是数字

    public static boolean checkStr(String str) {if (str.length() > 9) {return false;}for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (c < '0' || c > '9') {return false;}}return true;}

注意这里是进行的字符的比较注意字符0和9的ASCII编码是多少,如果忘了可以临时用字符‘0’和字符‘9’来表示。要当循环结束后才能判断是否是true,所有不满足条件的都已排除了,剩下的就是满足条件的,直接返回true

第二步,将符合要求的字符串拆分成一个个的字符,并将每个字符转化为相应的罗马数字,最后将这些罗马数字拼接成一个字符串

        StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);String s = changeluoma(c);sb.append(s);}

注意这里主要运用了stringBuilder来拼接字符串的,stringBuilder来拼接字符串比单纯的“+”的加号的拼接更加快速

    public static String changeluoma(char number) {String str;str = switch (number) {case '0' -> "";case '1' -> "I";case '2' -> "II";case '3' -> "III";case '4' -> "IV";case '5' -> "V";case '6' -> "VI";case '7' -> "VII";case '8' -> "VIII";case '9' -> "IX";default -> "";};return str;}

注意这里用的是switch语句来进行配对替换的。因为是将要注意进行替换的是字符,最后出来的是罗马数字(字符串),所以我们要将数字字符用单引号括起来,但是到了转化后要用双引号将罗马数字引起来,这里是直接进来的字符,出来的字符串,所以要返回一个字符串类型。这个是一个简洁的版本,因为都是赋值的操作,所以将str=统一放到了switch前面。下面是一个完整版的

    public static String changeluoma(char number) {String str;switch (number) {case '1' -> str = "I";case '2' -> str = "II";case '3' -> str = "III";case '4' -> str = "IV";case '5' -> str = "V";case '6' -> str = "VI";case '7' -> str = "VII";case '8' -> str = "VIII";case '9' -> str = "IX";default -> str = "";}return str;}

这里不仅可以switch语句进行替换,同样可以用查表法的方法来进行替换,下面来展示用查表法进行替换的过程

因为查表法主要运用的是数字作为数组的下标,所以相比switch语句的替换,我们多了一步就是将字符数字‘0’—‘9’转化为数字0—9,所以在Main方法里也要相应的发生变化

Main方法

        StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);int number = c - '0';String s = changeluoma(number);sb.append(s);}

changeluoma方法

    public static String changeluoma(int number) {String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return arr[number];}

这里用到的查表法进行替换在金额转换的里面已经讲解过了,这里不做讲解了

第三步,将结果出输出

 System.out.println(sb);

【总代码】

版本一(switch替换法)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);String s = changeluoma(c);sb.append(s);}System.out.println(sb);}public static String changeluoma(char number) {String str;str = switch (number) {case '0' -> "";case '1' -> "I";case '2' -> "II";case '3' -> "III";case '4' -> "IV";case '5' -> "V";case '6' -> "VI";case '7' -> "VII";case '8' -> "VIII";case '9' -> "IX";default -> "";};return str;}public static boolean checkStr(String str) {if (str.length() > 9) {return false;}for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (c < '0' || c > '9') {return false;}}return true;}
}

版本二(查表法)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);int number = c - '0';String s = changeluoma(number);sb.append(s);}System.out.println(sb);}public static boolean checkStr(String str) {if (str.length() > 9) {return false;}for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (c < '0' || c > '9') {return false;}}return true;}public static String changeluoma(int number) {String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return arr[number];}
}

【效果展示】

相关文章

热门推荐