在为计算机约会分配编写我的代码时,我们看到四个对象的数组的兼容性,但是我的代码打印得很奇怪。 (Eclipse最初没有给我一个错误/警告)。
代码:
System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n " +
+ '\t' + profile1.fitValue(profile2) + '\n');
当我尝试打印出东西时,它们看起来像这样:
伊丽莎白·贝内特(Elizabeth Bennett)和伊丽莎白·贝内特(Elizabeth Bennett)之间的匹配:
90.0
伊丽莎白·贝内特(Elizabeth Bennett)和菲茨威廉·达西(Fitzwilliam Darcy)之间适合:
90.55
伊丽莎白·贝内特(Elizabeth Bennett)和罗密欧·蒙塔格(Romeo Montague)之间的搭配:
90.3
伊丽莎白·贝内特(Elizabeth Bennett)和朱丽叶·卡普莱特(Juliet Capulet)之间的搭配:
90.0
................................................... .....如此等等。
我的数字前面有一个“9”。
后来我发现了问题:我的“\n”之后有两个串联运算符(“+”)。因此,我更改了代码,删除了多余的“+”。
新代码:
System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n " +
'\t' + profile1.fitValue(profile2) + '\n');
新的正确运行:
伊丽莎白·贝内特(Elizabeth Bennett)和伊丽莎白·贝内特(Elizabeth Bennett)之间的匹配:
0.0
伊丽莎白·贝内特(Elizabeth Bennett)和菲茨威廉·达西(Fitzwilliam Darcy)之间的匹配:
0.55
伊丽莎白·贝内特(Elizabeth Bennett)和罗密欧·蒙塔格(Romeo Montague)之间的搭配:
0.3
伊丽莎白·本内特(Elizabeth Bennett)和朱丽叶·卡普莱特(Juliet Capulet)
0.0
.....................................等等。
尽管庆幸地发现了我的问题,但我想知道到底是什么导致了这种情况的发生。是否有某种 eclipse 速记导致“9”的出现?还是这是由于某些 eclipse 的bug?我仍然是Java的初学者,所以我不能做出可靠的结论。
我尝试稍微修改我的代码以查看Eclipse的 react (我删除了原始“+ +”之间的空格):
System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n " ++
'\t' + profile1.fitValue(profile2) + '\n');
Eclipse给了我这个警告:
这行有多个标记
token “++”上的
预期的
这是有道理的,因为++本身就是某种运算符。
但是,有趣的是,如果在“++”之间放置空格,则警告消失。
出于可读性考虑,我并没有粘贴整个代码,但是如有必要,我可以对其进行编辑和添加。
对此进行一些澄清将是有帮助的。谢谢你。
最佳答案
问题不仅仅在于代码中的+ +
。但这还与您使用 char '\t'
而不是字符串 "\t"
的事实有关。
因此,当您使用System.out.println("Hello" + '\t');
时,\t
被当作字 rune 字,并作为\t
附加到字符串中。
但是,当您使用System.out.println("Hello" + + '\t');
时,它实际上变成了System.out.println("Hello" + (+ '\t'));
。因此,它被java视为int
。您只能将+
和-
符号分配给int,而不是char。
请记住,您可以执行int i = +2
或-2
或+ +2
。
并且\t
的ASCII值为9
。因此,它被附加到字符串上并被打印为Hello9
。
关于java - Java: “9”是否出现在我的运行中是Eclipse错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31801069/