gpt4 book ai didi

Java: "9"出现在我的运行中是 Eclipse 错误吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:34 24 4
gpt4 key购买 nike

在为计算机约会作业编写代码时,我们看到了四个对象数组的兼容性,但我的代码打印得很奇怪。 (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

................................................所以等等。

尽管幸运的是我已经找到了我的问题,但我想知道究竟是什么导致了这种情况发生。是否有某种导致“9”出现的 eclipse 速记?或者这是由于一些 eclipse 错误?我还是 java 的初学者,所以我不能得出可靠的结论。

我尝试稍微修改我的代码以查看 Eclipse 的 react (我删除了原始“++”之间的空格):

System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n   " ++
'\t' + profile1.fitValue(profile2) + '\n');

Eclipse 给了我这个警告:

这条线有多个标记

  • 标记“++”的语法错误,+ 预计

  • 操作++/-- 的参数无效

这是有道理的,因为++ 本身就是某种运算符。然而,有趣的是,如果我在“++”之间放置一个空格,那么警告就会消失。

为了可读性,我没有粘贴我的全部代码,但如果有必要,我可以编辑并添加它。对此进行一些澄清会有所帮助。谢谢。

最佳答案

不,这不是错误。这很不寻常,但不是错误。

首先要做的是大量简化示例:

public class Test {
public static void main(String[] args) {
String start = "Start";
String end = "End";
System.out.println(start + '\t' + end);
System.out.println(start + +'\t' + end);
}
}

结果:

Start   End
Start9End

诚然,我正在为 start 使用字符串和 end , 但由于 +是左关联的,这在这里没有任何区别。 (如果 start 是整数,则第一个二进制 + 运算符在两种情况下都是整数加法。)

基本上,额外的 +最终成为 unary + operator'\t'作为操作数。 Unary numeric promotion适用于 char , 给出 int因此。所以代码变得有效:

System.out.println(start + +((int)'\t') + end);

这是有效的:

System.out.println(start + +(9) + end);

这是有效的

System.out.println(start + 9 + end);

... 到此为止,您应该清楚为什么会得到这样的输出了。

为了避免不小心把一个字符当作一个整数来处理,最好只使用字符串来代替——此时代码不会编译,因为没有一元+String 的运算符:

System.out.println(start + +"\t" + end);

... 给出:

Test.java:6: error: bad operand type String for unary operator '+'

关于Java: "9"出现在我的运行中是 Eclipse 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31801069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com