解释为什么会出现错误的输出?
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
值,具体取决于数据类型。但如果它们是 short
、byte
或 char
,它们将被视为 int
。这称为二进制数字提升,在 Java 语言规范中有详细说明。
现在在 Java 中,单引号用于分隔 char
文字。因此,当您编写 e + ' '
时,您是在将 int
添加到 char
。这是加法 - char
被视为 int
,操作数作为数字相加。
对应的数字是 32,因为这是 Java 使用的字符编码中的数值,类似于 UTF-16。与此页面上的其他一些答案相反,它是 不是 ASCII。
双引号用于分隔 String
文字。所以如果你写 e + " "
,操作数是一个 int
和一个 String
。这意味着您不再添加,而是连接。 int
首先转换为 String
,然后连接到 " "
,这将为您提供您期望的结果。
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
值,具体取决于数据类型。但如果它们是short
、byte
或char
,它们将被视为int
。这称为二进制数字提升,在 Java 语言规范中有详细说明。
现在在 Java 中,单引号用于分隔 char
文字。因此,当您编写 e + ' '
时,您是在将 int
添加到 char
。这是加法 - char
被视为 int
,操作数作为数字相加。
对应的数字是 32,因为这是 Java 使用的字符编码中的数值,类似于 UTF-16。与此页面上的其他一些答案相反,它是 不是 ASCII。
双引号用于分隔 String
文字。所以如果你写 e + " "
,操作数是一个 int
和一个 String
。这意味着您不再添加,而是连接。 int
首先转换为 String
,然后连接到 " "
,这将为您提供您期望的结果。