在为计算机约会分配编写我的代码时,我们看到了四个对象数组的兼容性,我的代码打印得很奇怪.(Eclipse最初没有给我一个错误/警告).
码:
System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n " +
+ '\t' + profile1.fitValue(profile2) + '\n');
Run Code Online (Sandbox Code Playgroud)
当我试图打印出来时,它们看起来像这样:
适合Elizabeth Bennett和Elizabeth Bennett:90.0
适合Elizabeth Bennett和Fitzwilliam Darcy:90.55
适合伊丽莎白贝内特和罗密欧蒙塔古: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');
Run Code Online (Sandbox Code Playgroud)
新的正确运行:
适合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"的出现?或者这是由于一些日食错误?我还是java的初学者,所以我无法得出可靠的结论.
我尝试稍微修改我的代码,看看Eclipse会如何反应(我删除了原来的"+ +"之间的空格):
System.out.print("Fit between " + profile1.getTitle() + " and " + profile2.getTitle() + ": \n " ++
'\t' + profile1.fitValue(profile2) + '\n');
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Start End
Start9End
Run Code Online (Sandbox Code Playgroud)
诚然,现在我使用的字符串既start和end,但由于+被左结合的,不会使这里的任何差异.(如果start是整数,则+在这两种情况下,第一个二元运算符将是整数加法.)
基本上,多余的+结束是一个一元+运算符与'\t'操作数.一元数字促销应用于char,int结果给出.所以代码变得有效:
System.out.println(start + +((int)'\t') + end);
Run Code Online (Sandbox Code Playgroud)
这是有效的:
System.out.println(start + +(9) + end);
Run Code Online (Sandbox Code Playgroud)
这是有效的
System.out.println(start + 9 + end);
Run Code Online (Sandbox Code Playgroud)
...在这一点上,我们很清楚你为什么要得到你的输出.
为了避免意外地将字符视为整数,最好只使用字符串 - 此时代码将无法编译,因为没有一元运算+符String:
System.out.println(start + +"\t" + end);
Run Code Online (Sandbox Code Playgroud)
......给出:
Test.java:6: error: bad operand type String for unary operator '+'
Run Code Online (Sandbox Code Playgroud)
问题不仅+ +在于你的代码.但它也是因为你使用的是char '\t'而不是String "\t".
因此,当您使用时System.out.println("Hello" + '\t');,将\t其作为字符文字并附加到字符串中\t.
但是当你使用时System.out.println("Hello" + + '\t');,它会变得有效System.out.println("Hello" + (+ '\t'));.所以它被视为intjava.您只能分配+和-签署整数而不是字符.
记住你可以做int i = +2或-2或+ +2.
并且ASCII值\t是9.因此它被附加到字符串并得到打印为Hello9.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |