【視頻+圖文】Java經典基礎練習題(五):鍵盤輸入一個五位數,判斷這個數是否為回文數


能解決題目的代碼並不是一次就可以寫好的
我們需要根據我們的思路寫出后通過debug模式找到不足再進行更改
多次測試后才可得到能解決題目的代碼!
通過學習,練習【Java基礎經典練習題】,讓我們一起來培養這種解決問題思路。

一、視頻講解

點擊這里即可去B站觀看

二、思路分析

【如何獲取一個正整數的每一位】以及【如何使用鍵盤輸入】點擊這里復習

Q1: 什么是回文數?

A1: 如:12321
即將這個數的數字按相反的順序重新排列后,所得到的數和原來的數一樣。
【正着讀是12321,反着讀也是12321】
對於5位數回文數來說就是【個位和萬位相同】,【十位和千位相同】 所以可以根據這個條件來判斷一個數是否為回文數

Q2:怎樣獲取一個五位數的每一位?

A2: 第四題我們已經對這個問題具體講解過了~
         點擊下面的鏈接就可以看到第四題。

【如何獲取一個正整數的每一位】以及【如何使用鍵盤輸入】點擊這里復習

這里小喬就給大家復習一下獲取一個數的每一位的規律:

  1. 先用輸入的正整數num與10取余
    再將輸入的正整數num與10相除,得到的結果仍保存在num
    即num=num/10

  2. 我們可以看到:
    最后一次循環被除數為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為例:

  1. num=12321,num1=num=12321(用num1>0&&i<arr.length作為while循環的條件)

  2. i=0 (數組arr的下標,因為arr.length=5,所以arr的下標范圍【0-4】)

  3. yu=0(將取出的每一位數保存在變量yu中)

  4. 創建一個數組arr ,長度為5,因為我們輸入的是5位數

int arr[] = new int[5];
  1. 接下來進入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循環

  1. 進入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基礎+算法~
還有更多資源等你來拿哦~

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM