能解決題目的代碼並不是一次就可以寫好的
我們需要根據我們的思路寫出后通過debug模式找到不足再進行更改
多次測試后才可得到能解決題目的代碼!
通過學習,練習【Java基礎經典練習題】,讓我們一起來培養這種解決問題思路。
一、視頻講解
二、思路分析
【如何獲取一個正整數的每一位】以及【如何使用鍵盤輸入】點擊這里復習
Q1: 什么是回文數?
A1: 如:12321,
即將這個數的數字按相反的順序重新排列后,所得到的數和原來的數一樣。
【正着讀是12321,反着讀也是12321】
對於5位數的回文數來說就是【個位和萬位相同】,【十位和千位相同】 所以可以根據這個條件來判斷一個數是否為回文數
Q2:怎樣獲取一個五位數的每一位?
A2: 第四題我們已經對這個問題具體講解過了~
點擊下面的鏈接就可以看到第四題。
【如何獲取一個正整數的每一位】以及【如何使用鍵盤輸入】點擊這里復習
這里小喬就給大家復習一下獲取一個數的每一位的規律:
-
先用輸入的正整數num與10取余,
再將輸入的正整數num與10相除,得到的結果仍保存在num中
即num=num/10 -
我們可以看到:
最后一次循環被除數為1,此時每一位都已被取出。所以被除數大於0
- 12321%10=1(個位) 12321/10=1232
- 1232%10=2(十位) 1232/10=123
- 123%10=3(百位)123/10=12
- 12%10=2(千位)12/10=1
- 1%10=1(萬位)1/10=0
三、代碼+詳解+結果
代碼:
package Exercise;
import java.util.Scanner;
public class HuiWen {
public static void main(String[] args) {
int num, num1 = 0;
int i = 0;
int yu = 0;// 將取出的每一位數保存在變量yu中
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個五位數");
num = sc.nextInt();// 將鍵盤輸入的數存入變量num中
int arr[] = new int[5];// 因為輸入的是5位數,所以數組長度為5
num1 = num;// 把num的值賦給num1
/*
* 思路:輸入的正整數num與10取余, 再將輸入的正整數num與10相除, 相除后的結果仍保存在num中,即num=num/10
*/
while (num1 > 0 && i < arr.length) {// 用num1的值做判斷,num在下面輸出語句中使用。
yu = num1 % 10;// 取出的每一位保存在變量yu中
arr[i] = yu;// 將yu的值賦給arr[i]
num1 = num1 / 10;// 為取出下一位數做准備
i++;// 數組的索引i需要+1,如果不+1那么原來放入的數就會被新放入的數代替,即循環過后只有arr[0]是有值的
}
if (arr[0] == arr[4] && arr[1] == arr[3]) {// 如果個位和萬位相等並且十位和千位相等(兩個條件都要滿足),此數為回文數
System.out.println(num + "是回文數");// 如果此處寫的是num1,輸出的就是0。並不是我們通過鍵盤輸入的數
} else {// 否則,就不是回文數
System.out.println(num + "不是回文數");
}
}
}
詳解:
以鍵盤輸入12321為例:
-
num=12321,num1=num=12321(用num1>0&&i<arr.length作為while循環的條件)
-
i=0 (數組arr的下標,因為arr.length=5,所以arr的下標范圍【0-4】)
-
yu=0(將取出的每一位數保存在變量yu中)
-
創建一個數組arr ,長度為5,因為我們輸入的是5位數
int arr[] = new int[5];
- 接下來進入while循環
while (num1 > 0 && i < arr.length) {// 用num1的值做判斷,num在下面輸出語句中使用。
yu = num1 % 10;// 取出的每一位保存在變量yu中
arr[i] = yu;// 將yu的值賦給arr[i]
num1 = num1 / 10;// 為取出下一位數做准備
i++;// 數組的索引i需要+1,如果不+1那么原來放入的數就會被新放入的數代替,即循環過后只有arr[0]是有值的
}
(1) num1=12321,i=0 滿足num1 > 0 && i < arr.length,進入while循環
- yu=12321%10=1
- arr[0]=yu=1
- num1=12321/10=1232
- i ++,i=1
(2) num1=1232,i=1 滿足num1 > 0 && i < arr.length,進入while循環
- yu=1232%10=2
- arr[1]=yu=2
- num1=1232/10=123
- i++,i=2
(3) num1=123,i=2 滿足num1 > 0 && i < arr.length,進入while循環
- yu=123%10=3
- arr[2]=yu=3
- num1=123/10=12
- i++,i=3
(4) num1=12,i=3 滿足num1 > 0 && i < arr.length,進入while循環
- yu=12%10=2
- arr[3]=yu=2
- num1=12/10=1
- i++,i=4
(5) num1=1,i=4滿足num1 > 0 && i < arr.length,進入while循環
- yu=1%10=1
- arr[4]=yu=1
- num1=1/10=0
- i++,i=5
(6) num=0,i=5不滿足num1 > 0 && i < arr.length,退出while循環
- 進入if條件分支語句
if (arr[0] == arr[4] && arr[1] == arr[3]) {// 如果個位和萬位相等並且十位和千位相等(兩個條件都要滿足),此數為回文數
System.out.println(num + "是回文數");// 如果此處寫的是num1,輸出的就是0。並不是我們通過鍵盤輸入的數
} else {// 否則,就不是回文數
System.out.println(num+ "不是回文數");
}
(1) 因為此處arr[0]arr[4]&&arr[1]arr[3]成立
(2) 所以輸出12321是回文數
注意:此處要用num輸出。如果此處寫的是num1,輸出的就是0。
結果:


四、彩蛋
歡迎大家來公號
“小喬的編程內容分享站” 來找小喬玩~
一起學習Java基礎+算法~
還有更多資源等你來拿哦~

