问题描述
public class ArrayIntro
{
public static void main(String[] args)
{
int[] a;
a=new int[10];
Scanner sc =new Scanner(system.in);
for(int i=0;i<10;i++)
{
a[i]=sc.nextInt();
}
for(int e:a)
{
System.out.print(e+' ');
}
}
}
输入:1 2 3 4 5 6 7 8 9 10
输出:33343536373839404142
这意味着每个数字加了32
解决方法
只需尝试以下代码即可。
当您在for循环中打印sout时,它正在打印数字和空格之和( ' '
)。而且空格的ASCII值为32,因此您可以看到每个元素的附加值均为32。
对于ASCII Or Unicode,您可以参考此链接,它将为您提供帮助。
您只需输入以下 System.out.print(new Integer(' '));
,它将显示32。
如果只想添加空间,则使用双引号。
System.out.print(e+" ");
。
将单引号视为字符,并将字符添加到Integer中将总结其ASCII码。
public static void main(String[] args)
{
int[] a;
a=new int[10];
Scanner sc =new Scanner(System.in);
for(int i=0;i<10;i++)
{
a[i]=sc.nextInt();
}
for(int e:a)
{
System.out.print(e+" ");
}
}
,
简单来说,“”是ASCII字符,其值是32。据我所知,您可能希望直接打印它,因此可以将“”替换为“”。永远记住,单引号用于字符,双引号用于字符串。
对于您的答案,您可以执行以下操作:System.out.print(e+" ");
代替此:System.out.print(e+' ');
简而言之,要修复程序,您需要使用" "
(带双引号)而不是' '
。
问题在于+
运算符在Java中具有两种不同的含义。
- 如果两个操作数中的任何一个为
String
,则+
的意思是“将这两个操作数连接在一起”。如果另一个操作数不是String
,则必须以某种方式对其进行转换,并且关于如何执行此操作有一些规则。 - 如果两个操作数都不是
String
,则+
的意思是“将这两个操作数加在一起”-也就是说,它们被视为数字。根据数据类型,可以将它们添加为double
值,float
值,long
值或int
值。但是,如果它们是short
,byte
或char
,它们将被视为int
。这称为二进制数值提升,并在Java语言规范中进行了详细说明。
现在在Java中,单引号用于分隔char
文字。因此,当您编写e + ' '
时,就是在int
上添加char
。这是加法-char
被视为int
,并且操作数被添加为数字。与
对应的数字为32,因为这是Java使用的字符编码中的数字值,类似于UTF-16。与该页面上的其他答案相反,它是不是 ASCII。
双引号用于分隔String
文字。因此,如果您写e + " "
,则操作数是int
和String
。这意味着您不再添加任何内容,而是进行串联。首先将int
转换为String
,然后将其连接到" "
,这将为您提供期望的结果。