23

对于我在 Java 和一般编程方面令人难以置信的新手,我想先向您道歉。但是我到处寻找答案,但我似乎找不到答案。

所以我只是想运行以下命令:

public class WriteSquares2
{
  public static void main(String[] args)
  {
    for (int i=1; i<=10; i++)
    {
      System.out.println(i + " \u2261 " + (i % 7) + " modulo 7");
    }
  }
}

Unicode 字符 \u2261 是同余符号 (≡)。DrJava 显示以下输出:

1 ? 1 modulo 7
2 ? 2 modulo 7
3 ? 3 modulo 7
4 ? 4 modulo 7
5 ? 5 modulo 7
6 ? 6 modulo 7
7 ? 0 modulo 7
8 ? 1 modulo 7
9 ? 2 modulo 7
10 ? 3 modulo 7

最奇怪的是,当我简单地输入

'\u2261'

进入交互框,我得到单引号中的等价字符:

'≡'

我试过简单地把 '\u2261' 放在代码中而不是“\u2261”,但后来我得到了这样的东西:

8803 modulo 7
8805 modulo 7
8807 modulo 7

我还尝试只是将 unicode 字符插入代码中,但这只是给出了一条错误消息。谁能弄清楚发生了什么或我做错了什么?非常感谢您的帮助。

[我应该补充一点,这不是家庭作业或任何东西,因为我们的书甚至几乎没有提到 Unicode——只是想弄清楚这一点……当我开始的时候,我没想到会这么难!]

编辑:我使用的是 Mac OS 10.7.5,Java 博士说它的构建是“drjava-20120818-r5686”。

编辑#2:这是使用 Monospaced 12 作为我的主要字体的屏幕截图。它仍然显示为问号,即使我可以让控制台将符号返回给我,如果我直接输入它,但使用单引号。

在此处输入图像描述

4

3 回答 3

8

问题与您使用的字体有关,这与您的代码无关。参见 DrJava 的设置Edit > Preferences > Display Options > Fonts > Main Font

DrJava 在 Linux 上使用默认字体(等宽 12): Linux 上的 DrJava 与

DrJava 在 Linux 上使用不同的字体(PT Sans 12): Linux 上的 DrJava 与

两张截图都来自同一个 DrJava 实例;我什至不必关闭它。请注意,在“交互”窗格中,字形对于我的等宽字体是正确的,并且是 PT Sans 的通用占位符。在控制台选项卡(未显示)中也会发生同样的情况。

于 2013-05-22T06:36:53.027 回答
2

我做了一些研究,我找到了一个之前从另一个问题here中找到的解决方案

所以在这种情况下,它可能是类似的。不是你的代码,而是 DrJava 处理 unicode 的方式取决于你的系统。

" 字符编码取决于系统。根据您的机器,它可能会打印 UTF-16 编码的 16 位(即 9794)、高 8 位(即 38)或在您的情况下,低8 位(即 66)。

9794 / 256 = 38
9794 % 256 = 66

"

于 2017-05-15T16:40:35.217 回答
0

您是否已将提示更改为以 unicode 输出。(注意英语世界中的 Java 默认值为 IS0-8859-1)。

于 2013-05-22T04:37:43.413 回答