小弟有一段代码不太明白求大佬赐教

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String s=scanner.nextLine();
int len=s.length();
int []arr1=new int[10];
for(int i=len-1;i>=0;i--){
if(arr1[s.charAt(i)-48]==0){
System.out.print(s.charAt(i)-48);
arr1[s.charAt(i)-48]++;
}
}
}
}
}
if(arr1[s.charAt(i)-48]==0){
这句charAt(i)返回的不是具体数字吗,为什么要减48啊,我知道48是ascii的0

首先你要知道charAt的作用是返回字符串指定位置的char值。如果s="102"。那么chatAt(0)='1',这个‘1’是字符,不是数字。而后面是判断是否为0。当然要用其ASCII的数值减48了

'0'的ascii是48
0的值是0
所以'0'和0差48
以此类推
一个字符转换对应的值,就要减去48

楼主的这特测试只能输0~9的数字? s.charAt(i) 就是48~57之间的数了 ,s.charAt(i)-48 就是0~9之间的数了 ,正好是arr1数组的下标啊,arr1[0]......

不减48,就成了arr1[48]、arr1[49]....arr1[57]..明显不对吧!!!

charAt(i)这个返回的是一个char类型,,,

char类型的0是48没错,,,,需要把char转化成数字就需要 ,,s.charAt(i)-48

这程序不能输入除数字以外的字符。

ASCII值‘0’应的是48,‘1’、‘2’、‘3’就分别对应49,50,51;
所以要转换为我们日常理解的一二三四,需要减去48这个得到差值1、2、3;
这个1、2、3就是我们生活中使用的数字;前面带引号的‘0’是字符零,是ASCII表中的零而已;
图片说明

charAT(),获取到的是一个char类型的数据,你如果要转化为一个对应的int就要-48,比如 一个char类型的 '1' ,直接转化为int就是49,如果你那这个直接与int比较是不对的,所以要减48