前言(问题引入)
要求:编写一个程序,要求输入一个两位数的数字,然后逆序输出数字。
不考虑不合理的输入或是溢出等特殊情况。
样例:
输入:28
输出:82
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();
//用代数方法:1.得到个位:28/10 = 2 2.得到十位:28%10*10 = 80 3.相加
System.out.println(a / 10 + a % 10 * 10);
input.close();
}
运行之后,发现用代数方法存在一些问题:遇到整十数,会把取模后的零与个位数加上,得到一个个位数。 e.g.:输入: 20 ; 输出: 2
逆序输出的方法讨论归纳(解决办法)
方法一:遍历输出(相关:String转为char)每一位逆序输出
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String num = input.nextLine();
for (int i = num.length() - 1; i >= 0; i--) {
char number = num.charAt(i);
System.out.print(number);
}
}
方法二:取模输出(每一位)
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num1 = input.nextInt();
while (num1 != 0) {
int a = num1 % 10;
System.out.print(a);
num1 = num1 / 10;
}
}
方法三:toCharArray()方法(得到每一位)
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String num2 = input.nextLine();
String number = "";
char[] c = num.toCharArray();
for (int i = c.length - 1; i >= 0; i--){
number += c[i];
}
System.out.print(number);
}
方法四:reverse方法
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String number = input.nextLine();
System.out.print(reverse(number));
}
private static String reverse(String number){
return new StringBuffer(number).reverse().toString();
}
应用
类型相似
数字逆序输出
要求:将一个四位数正整数(如1278)逆序(如8721)输出。
不考虑负数等特殊情况。
样例:
输入:1234
输出:4321
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// code here
String num = input.nextLine();
for (int i = num.length() - 1; i >= 0; i--) {
char number = num.charAt(i);
System.out.print(number);
}
input.close();
}
类型扩大
字符串类型,如中文、英文…逆序输出
要求:
输入: I am a student
输出: tneduts a ma I
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
for (int i = str.length()-1;i >= 0; i--) {
System.out.print(str.charAt(i));
}
}
总结
总结:
代数相加后再输出在遇到整十数逆序输出,就会变成个位数输出,问题关注每一位逆序输出,
方法二(取模输出)不进行代数相加,每一次得到的一位数直接进行输出,再回去判断,可以解决问题。
还可以用遍历输出、toCharArray()方法和reverse方法进行逆序输出。
数字、中文、英文逆序输出都可以用类似办法。