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

Explain why the Wrong Output Happened?

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
Output:33343536373839404142

意思是每个数加32

试试下面的代码。

当您在 for 循环内打印 sout 时,它打印的是数字和 Space(' ') 的总和。 space 的 ASCII 值为 32,因此您可以看到每个元素的附加值为 32。

对于ASCII Or Unicode你可以参考这个link,它会帮助你。

只要你输入这样的东西System.out.print(new Integer(' '));,它就会打印出 32.

如果你只想添加 space 然后用双引号。 System.out.print(e+" ");.

单引号视为字符,加上整数的字符将与它们的 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 + " ",操作数是一个 int 和一个 String。这意味着您不再添加,而是连接。 int 首先转换为 String,然后连接到 " ",这将为您提供您期望的结果。