键盘录入一个字符串
要求1:长度为小于等于9
要求2:只能是数字
将内容变成罗马数字
下面是阿拉伯数字跟罗马数字的对比关系:
I-1,II-2,III-3,IV-4,V-5,VI-6,VII-7,VIII-8,IX-9
注意点:
罗马数字里面没有0的
如果键盘录入的数字包含0,可以变成“ ”(长度为0的字符串)
根据要求,逐步完成
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);
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];}
}