解释为什么会出现错误的输出?

问题描述

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值。但是,如果它们是shortbytechar,它们将被视为int。这称为二进制数值提升,并在Java语言规范中进行了详细说明。

现在在Java中,单引号用于分隔char文字。因此,当您编写e + ' '时,就是在int上添加char。这是加法-char被视为int,并且操作数被添加为数字。与 对应的数字为32,因为这是Java使用的字符编码中的数字值,类似于UTF-16。与该页面上的其他答案相反,它是不是 ASCII。

双引号用于分隔String文字。因此,如果您写e + " ",则操作数是intString。这意味着您不再添加任何内容,而是进行串联。首先将int转换为String,然后将其连接到" ",这将为您提供期望的结果。