如何將char類(lèi)型的數(shù)字字符轉(zhuǎn)換成int類(lèi)型問(wèn)題
將char類(lèi)型的數(shù)字字符轉(zhuǎn)換成int類(lèi)型
近來(lái)面試遇到一個(gè)問(wèn)題,通過(guò)控制臺(tái)輸入一個(gè)12位的數(shù)字,然后進(jìn)行一些計(jì)算,然后被困在如何把char類(lèi)型的數(shù)字轉(zhuǎn)換成int類(lèi)型。
通過(guò)搜索,找到兩個(gè)解決辦法。
1、把char型轉(zhuǎn)換成int類(lèi)型
?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));
?
? ? ? }第一種辦法:通過(guò)charAt(i),把字符串的每位變成char型,然后用當(dāng)前字符減去字符0 (temp_char-'0'),得到當(dāng)前字符的int值。
第二種辦法:把字符再轉(zhuǎn)成字符串,然后再?gòu)?qiáng)制轉(zhuǎn)換成int型。
2、把字符串拆分成一位一位的
第一種方法:循環(huán)后charAt(i);
注意:charAt(i)得到的是字符串對(duì)應(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
?* 請(qǐng)?jiān)诳刂婆_(tái)任意輸入一個(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("請(qǐng)輸入一個(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é)果:
請(qǐng)輸入一個(gè)12位的數(shù)字。。。。。。
111111111111
checkCode = 6
兩個(gè)char類(lèi)型的字符相加結(jié)果是int類(lèi)型的整數(shù)
程序驗(yàn)證
public class Test {
? ? public static void main(String[] args) {
? ? ? ? System.out.println('a'+'b');
? ? }
}結(jié)果:
195
結(jié)論
當(dāng)對(duì)byte、short、char類(lèi)型進(jìn)行混合運(yùn)算時(shí),最終結(jié)果一定是整型,當(dāng)然你也可以把它們都轉(zhuǎn)換成int類(lèi)型的,之后在進(jìn)行混合運(yùn)算
當(dāng)多種數(shù)據(jù)類(lèi)型進(jìn)行混合運(yùn)算的時(shí)候,最后的數(shù)據(jù)類(lèi)型一定是它們中取值最大的那個(gè)數(shù)據(jù)類(lèi)型,如果里面有字符串的話,那最后的數(shù)據(jù)類(lèi)型一定是字符串類(lèi)型,至于中間怎么運(yùn)算的,接下來(lái)我通過(guò)幾個(gè)例子來(lái)說(shuō)明一下:
例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
解釋?zhuān)?/p>
如果沒(méi)有直接和1.1相加運(yùn)算,那1/2還是按照整型去計(jì)算的,計(jì)算結(jié)果是0,然后加上1.1,結(jié)果就是double類(lèi)型的;
如果計(jì)算的過(guò)程中直接就是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
解釋?zhuān)?/p>
通過(guò)第一個(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)文章
SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說(shuō)明
這篇文章主要介紹了SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn)(AccessDecisionManager與投票決策)
本文主要介紹了SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來(lái)介紹一下,感興趣的可以了解一下2025-04-04
基于maven的springboot的"過(guò)時(shí)"用法解析
這篇文章主要為大家介紹了基于maven的springboot"過(guò)時(shí)"用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
maven項(xiàng)目后出現(xiàn)‘parent.relativePath’ of POM錯(cuò)誤時(shí)的解決方法
在Springboot項(xiàng)目啟動(dòng)時(shí),項(xiàng)目報(bào)錯(cuò)‘parent.relativePath’ of POM問(wèn)題,項(xiàng)目無(wú)法正常啟動(dòng),本文就來(lái)介紹一下解決方法,感興趣的可以了解一下2023-10-10
Java將日期類(lèi)型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類(lèi)型數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于Java將日期類(lèi)型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類(lèi)型數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
SpringBoot整合ip2region實(shí)現(xiàn)使用ip監(jiān)控用戶訪問(wèn)城市的詳細(xì)過(guò)程
這篇文章主要介紹了SpringBoot整合ip2region實(shí)現(xiàn)使用ip監(jiān)控用戶訪問(wèn)城市,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠與抽象工廠模式的使用實(shí)例
這篇文章主要介紹了Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠與抽象工廠模式的使用實(shí)例,簡(jiǎn)單工廠與抽象工廠都可以歸類(lèi)于設(shè)計(jì)模式中的創(chuàng)建型模式,需要的朋友可以參考下2016-04-04
Java業(yè)務(wù)中臺(tái)確保數(shù)據(jù)一致性的解決方案
數(shù)據(jù)一致性通常指關(guān)聯(lián)數(shù)據(jù)之間的邏輯關(guān)系是否正確和完整。而數(shù)據(jù)存儲(chǔ)的一致性模型則可以認(rèn)為是存儲(chǔ)系統(tǒng)和數(shù)據(jù)使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統(tǒng)所承諾的訪問(wèn)結(jié)果2021-10-10
java-list創(chuàng)建的兩種常見(jiàn)方式
本文給大家分享Java-list創(chuàng)建的兩種常見(jiàn)方式,每種方式結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2022-11-11

