我想给用户2个选择,无论是用字母还是数字读取节点。它会说“从节点A到B”或“从节点1到2”。所以我编写了类似// 2代码的代码(我想让它变得简单,所以我让条件为“真”)。但结果是“66”而不是“B”。但是,// 1代码工作正常。我怎样才能编写代码,允许我按照我想要的方式更改字母和显示?感谢。
System.out.println(true?(char)(65+1):65);//1
int a=65;
System.out.println(true?(char)(65+1):a);//2
结果
B
66
*尽量让它更清晰:我想制作一个循环打印出来
From node A to node B
From node A to node C
From node A to node D
...
所以我会写
for (int i=1;i<26;i++)System.out.println("From node A to node "+ (char)(65+i));
但如果用户决定:
,我也希望能够打印出来From node 1 to node 2
From node 1 to node 3
From node 1 to node 4
...
因此,我提出了一个关于用户想要的格式作为布尔format
变量的问题。我编辑代码
boolean format=true;//I simplify it
for (int i=1;i<26;i++)System.out.println("From node "+(format?"A":1)+ " to node "+ (format?(char)(65+i):i));
这里有结果
From node A to node 66
From node A to node 67
From node A to node 68
...
这不是我想要的。它应该是“从节点A到节点B”等... 我按照建议将// 2中的短类型更改为int,但它(类型)不是我要问的点。所以请不要介意。
答案 0 :(得分:2)
我无法理解你想要实现的目标(以及你为什么要使用短变量),但你所观察到的行为在the Java Language Specification中有所解释:
如果其中一个操作数是T类型,其中T是byte,short或char,另一个操作数是int类型的常量表达式(第15.28节),其值可以在类型T中表示,那么类型为条件表达式是T.
这解释了您在第一个示例中看到的内容:65
是int类型的常量表达式,(char)(65+1)
是char,因此三元表达式的类型为char。
否则,二进制数字提升(第5.6.2节)将应用于操作数类型,条件表达式的类型是第二个和第三个操作数的提升类型。
这解释了你在第二个例子中看到的内容:一个是short类型,另一个是char类型:它们都被提升为int,结果因此类型为int。
要做你想要达到的目标,我会做类似的事情:
private String formatNode(int node) {
return formatAsInteger ? Integer.toString(node + 1) : Character.toString((char) (node + 'A'));
}
// ...
for (int i = 1; i < 26; i++) {
System.out.println("From node " + formatNode(0) + " to node " + formatNode(i));
}
答案 1 :(得分:1)
您的代码中存在两个问题,?:中的第二个和第三个表达式的类型不同,以及由于使用true
而导致的死代码。我用两种不同的方法解决了第一个问题。第一个println在两个int
表达式之间进行选择,并将结果转换为char
。第二种情况是每个选定的表达式。我通过使用编译器不知道的布尔值修复了第二个问题。
public class Test {
public static void main(String[] args) {
boolean test = args.length < 1;
System.out.println((char) (test ? (65 + 1) : 65));
System.out.println(test ? (char) (65 + 1) : (char) 65);
}
}
答案 2 :(得分:0)
尝试:
System.out.println(true?(char)(65+1):65);//1
char a=65;
System.out.println(true?(char)(65+1):a);//2
答案 3 :(得分:0)
如果我理解你的问题,那就是你应该写的:
System.out.println((char)(false?(65+1):65));
你需要施放结果。