如何將char類型的數(shù)字字符轉(zhuǎn)換成int類型問題
將char類型的數(shù)字字符轉(zhuǎn)換成int類型
近來面試遇到一個(gè)問題,通過控制臺輸入一個(gè)12位的數(shù)字,然后進(jìn)行一些計(jì)算,然后被困在如何把char類型的數(shù)字轉(zhuǎn)換成int類型。
通過搜索,找到兩個(gè)解決辦法。
1、把char型轉(zhuǎn)換成int類型
?for(int i = 0;i<str.length();i++) ?? ?{ ?? ? ? ?char temp_char = str.charAt(i); ?? ? ? ?//把字符轉(zhuǎn)換成數(shù)字方法一 ?? ? ? int temp_int = temp_char-'0'; ?? ? ? //把字符轉(zhuǎn)換成數(shù)字方法二 ?? ? ? int temp_int = Integer.parseInt(String.valueOf(temp_char)); ? ? ? ? }
第一種辦法:通過charAt(i),把字符串的每位變成char型,然后用當(dāng)前字符減去字符0 (temp_char-'0'),得到當(dāng)前字符的int值。
第二種辦法:把字符再轉(zhuǎn)成字符串,然后再強(qiáng)制轉(zhuǎn)換成int型。
2、把字符串拆分成一位一位的
第一種方法:循環(huán)后charAt(i);
注意:charAt(i)得到的是字符串對應(yīng)的每位字符,可是不能直接轉(zhuǎn)成int,轉(zhuǎn)成int依然是ASCII值。
第二種方法:char[] temp = str.toCharArray();
注意:char[]里的內(nèi)容不是字符串的每位字符,而是每位字符的ASCII值。
具體面試題如下:
package cjl; ? import java.util.Scanner; ? /** ?* 一維碼有一種編碼是ean13,是一串13位數(shù)字。其中第13位是校驗(yàn)碼,作用是校驗(yàn)前面12個(gè)數(shù)字是否正確。 ?* 校驗(yàn)方法如下: ?* 1、前12位數(shù)字從左起,將所有的奇數(shù)位相加得出一個(gè)數(shù)a,將所有的偶數(shù)位相加得出一個(gè)數(shù)b ?* 2、將數(shù)b乘以3再與a相加得到數(shù)c ?* 3、用10減去數(shù)c的個(gè)位數(shù),如果結(jié)果不為10則校驗(yàn)碼為結(jié)果本身,如果為10則校驗(yàn)碼為0 ?* 請?jiān)诳刂婆_任意輸入一個(gè)12位數(shù)字,然后輸出校驗(yàn)碼 ?* @author ff ?* ?*/ ? ? public class CheckCode { ?? ? ?? ?public void checkCode(String str) ?? ?{ ?? ??? ?int checkCode = 0; ?? ??? ??? ?int a = 0;//奇數(shù)位的和 ?? ??? ??? ?int b = 0;//偶數(shù)位的和 ?? ??? ??? ?for(int i = 0;i<str.length();i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?char temp_char = str.charAt(i); ?? ??? ??? ??? ?//把字符轉(zhuǎn)換成數(shù)字方法一 ?? ??? ??? ??? ?int temp_int = temp_char-'0'; ?? ??? ??? ??? ?//把字符轉(zhuǎn)換成數(shù)字方法二 ?? ??? ??? ??? ?//int temp_int = Integer.parseInt(String.valueOf(temp_char)); ?? ??? ??? ??? ?//System.out.println("temp_char = "+temp_char); ?? ??? ??? ??? ?//System.out.println("temp__int = "+temp_int); ?? ??? ??? ??? ?if((i+1)%2==0)//偶數(shù)位 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?b+=(int)temp_int; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else //奇數(shù)位 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?a = a+(int)temp_int; ?? ??? ??? ??? ?} ?? ??? ??? ??? ? ?? ??? ??? ?} ?? ??? ??? ?int c = a+b*3; ?? ??? ??? ?int c_gw = c%10; ?? ??? ??? ?int d = 10-c_gw; ?? ??? ??? ? ?? ??? ??? ?//System.out.println("a = "+a+" b = "+b+" c = "+c+" c_gw = "+c_gw+" d = "+d); ?? ??? ??? ?if(d==10) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkCode= 0; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?checkCode= d; ?? ??? ??? ?} ?? ??? ? ?? ??? ??? ?System.out.println("checkCode = "+checkCode); ?? ?} ?? ? ?? ?public void Input() ?? ?{ ?? ??? ?while (true) { ?? ??? ??? ?Scanner scanner = new Scanner(System.in); ?? ??? ??? ?System.out.println("請輸入一個(gè)12位的數(shù)字。。。。。。"); ?? ??? ??? ?String str = scanner.nextLine(); ?? ??? ??? ?if((str.length()==12)&&(str.matches("[0-9]+"))) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkCode(str); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ? ?? ?/** ?? ? * @param args ?? ? */ ?? ?public static void main(String[] args) { ?? ??? ? ?? ??? ?CheckCode codeVo = new CheckCode(); ?? ??? ?codeVo.Input(); ?? ?} ? ? }
運(yùn)行結(jié)果:
請輸入一個(gè)12位的數(shù)字。。。。。。
111111111111
checkCode = 6
兩個(gè)char類型的字符相加結(jié)果是int類型的整數(shù)
程序驗(yàn)證
public class Test { ? ? public static void main(String[] args) { ? ? ? ? System.out.println('a'+'b'); ? ? } }
結(jié)果:
195
結(jié)論
當(dāng)對byte、short、char類型進(jìn)行混合運(yùn)算時(shí),最終結(jié)果一定是整型,當(dāng)然你也可以把它們都轉(zhuǎn)換成int類型的,之后在進(jìn)行混合運(yùn)算
當(dāng)多種數(shù)據(jù)類型進(jìn)行混合運(yùn)算的時(shí)候,最后的數(shù)據(jù)類型一定是它們中取值最大的那個(gè)數(shù)據(jù)類型,如果里面有字符串的話,那最后的數(shù)據(jù)類型一定是字符串類型,至于中間怎么運(yùn)算的,接下來我通過幾個(gè)例子來說明一下:
例1:
public class Test { ? ? public static void main(String[] args) { ? ? ? ? System.out.println(1 / 2 + 1.1); ? ? ? ? System.out.println(1.0 / 2 + 1.1); ? ? } }
結(jié)果:
1.1
1.6
解釋:
如果沒有直接和1.1相加運(yùn)算,那1/2還是按照整型去計(jì)算的,計(jì)算結(jié)果是0,然后加上1.1,結(jié)果就是double類型的;
如果計(jì)算的過程中直接就是1.0/2,那結(jié)果就是0.5,之后和1.1相加那結(jié)果就是1.6,結(jié)果還是double
例2:
public class Node { ? ? public static void main(String[] args) { ? ? ? ? System.out.println(1 + 2 + "3"); ? ? ? ? System.out.println("1" + 2 + 3); ? ? } }
結(jié)果:
33
123
解釋:
通過第一個(gè)結(jié)果可以看出是先進(jìn)行1+2,得出結(jié)果是3,之后在和字符串3拼接,所以結(jié)果是字符串33;
然后看第二個(gè)結(jié)果,那就是字符串1和2拼接,結(jié)果是字符串12,然后字符串12和3拼接,結(jié)果就是字符串123;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java concurrency線程池之線程池原理(二)_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Spring JPA聯(lián)表查詢之OneToOne源碼詳解
這篇文章主要為大家介紹了Spring JPA聯(lián)表查詢之OneToOne源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04java解決單緩沖生產(chǎn)者消費(fèi)者問題示例
這篇文章主要介紹了java解單緩沖生產(chǎn)者消費(fèi)者問題示例,需要的朋友可以參考下2014-04-04Resty開發(fā)restful版本的Jfinal深入研究
這篇文章主要為大家介紹了Resty開發(fā)restful版本的Jfinal深入研究有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03MyBatis?超詳細(xì)講解動態(tài)SQL的實(shí)現(xiàn)
動態(tài)?SQL?是?MyBatis?的強(qiáng)大特性之一。如果你使用過?JDBC?或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接?SQL?語句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號。利用動態(tài)?SQL,可以徹底擺脫這種痛苦2022-03-03Java Morris遍歷算法及其在二叉樹中的應(yīng)用
Morris遍歷是一種基于線索二叉樹的遍歷算法,可以在不使用?;蜻f歸的情況下,實(shí)現(xiàn)二叉樹的前序、中序和后序遍歷。該算法利用二叉樹中的空指針或線索指針,將遍歷序列嵌入到原二叉樹中,實(shí)現(xiàn)了常數(shù)級別的空間復(fù)雜度,適用于對空間要求較高的場景2023-04-04