【问题标题】:Why when i loop a \n in an ' ' char + a number it counts wrong [closed]为什么当我在''字符+数字中循环一个\ n时它计数错误[关闭]
【发布时间】:2015-03-12 01:04:24
【问题描述】:

好的,所以我有以下代码。我知道在 char 中创建新行没有任何意义,但我想知道为什么它从 10-19 而不是正常的 1-10 打印。有人可以给我答案吗?

public class Demo {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println('\n' + i);
        }
    }
}

【问题讨论】:

  • 它应该从0 计数到9。根据您看到的结果,这会给您任何提示吗?
  • System.out.println((int) '\n');
  • 我尝试使用 0 和 9,它的行为完全相同。
  • 如果你使用双引号而不是单引号 (System.out.println("\n" + i);) 你会得到我认为你正在寻找的结果。
  • println 已经打印了一个新行。发生的事情是您将 char '\n' 的值(恰好是 10)添加到整数 i 并打印结果。

标签: java for-loop char newline


【解决方案1】:

\n 的 ASCII 值是 10。+ 运算符被解释为两个数值之间的“添加”操作数,而不是两个字符串之间的“附加”操作。这是因为您使用的是单引号,而不是双引号。单引号表示char

char 在 Java 中可以被视为一个实际数字。您可以检查this chart 上的所有ASCII 值。

JLS 4.10.1 - Subtyping Among Primitive Types 非常清楚地表明charint 的子类型,如果您想查看深入的规范。还有JLS 5.1 - Kinds of Conversions 了解转化详情。

根据 Tom Blodget 在下面的评论,Java 似乎实际上将 UTF-16 用于字符串文字,如 the String documentationJLS 3 中所述。这可能是一个需要牢记的重要事实,尽管我多年来成功使用 ASCII 值并且从未遇到过错误或任何类型的问题。

【讨论】:

【解决方案2】:

如前所述,Java 将 '\n' 解释为 ASCII 字符,对应于整数值 10(十六进制值 0x0A)。

你可以做什么:

System.out.println('\n' + Integer.toString(i));
System.out.println("" + '\n' + i);
System.out.printf("\n %i", i));
System.out.printf("\n" + i));

但所有想法都与同一个想法相关。

【讨论】:

  • System.out.println("" + '\n' + i); .. System.out.println("\n" + i); 在这种情况下不是更有意义吗?
  • 是和不是。如果我们谈论的是有意义的事情:为什么要println 并添加'\n'?所以,你是对的,但实际上这个问题通常是可以讨论的。但我添加了你的建议。
  • 为什么,我问你为什么将String 连接到char 而不是首先使用单个字符串。
【解决方案3】:

String 连接仅适用于+ 的两个操作数之一是String 类型值的情况。在这种情况下,您有一个char 和一个int,没有String 值。因此,您有整数加法。 Java 应用原始扩展转换将 char'\n' 转换为 int 值 10。然后您可以看到为什么它从 10 计数到 19。

【讨论】:

  • 非常感谢您的解释。现在它是有道理的:)
猜你喜欢
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多