当前位置: 首页 > 知识库问答 >
问题:

无法在中转换为字符?:操作人员

马凡
2023-03-14

我想给用户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
...

因此,我提出了一个关于用户希望作为布尔变量的格式的问题。我将代码编辑为

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中的short类型改为int,但这不是我要问的重点。所以请不要介意。

共有3个答案

闽焕
2023-03-14

尝试:

System.out.println(true?(char)(65+1):65);//1

char a=65;
System.out.println(true?(char)(65+1):a);//2
澹台浩广
2023-03-14

您的代码中有两个问题,?:中的第二个和第三个表达式的类型不同,以及由于使用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);
  }
}
於永寿
2023-03-14

我无法理解您想要实现什么(以及为什么使用短变量),但Java语言规范中解释了您观察到的行为:

如果其中一个操作数的类型为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));
} 

 类似资料:
  • 这个类别的全部是展示以某些东西为基础来创建 Observables 是多么的容易,因此他们可以和操作符配合的很好,而不在乎是怎样的构造,从而实现丰富的组合。 from 在 RxJS 4中,存在一些类似名称的操作符,例如 fromArray()、from()、fromPromise() 等等。所有这些 fromXXX 的操作符现在全由 from() 接管了。来看一些示例: 老的 fromArray

  • 问题内容: 您如何将此String转换为gson.JsonArray? 这是我的代码: 这是将这个Collections字符串转换为JSonArray的方法吗? 问题答案: 要在JSON数组中包含字符串值,必须记住在Java程序中用反斜杠转义双引号。请参见下面的声明。 您在main()方法中的代码可以正常工作。以下只是对main()方法中的代码的微小修改。 最后,请记住在语句“ com.googl

  • 我将XML作为字符串传递给一个方法,并再次将其转换为XML来完成我的工作。 其正常工作正常,但当出现特殊字符时,如<代码> 我的XML字符串: 我的代码是: 错误: “=”是意外标记。预期标记为“;”。第1行,位置150。 完全错误为: 系统Xml。XmlException未由用户代码处理HResult=-2146232000消息=“=”是意外令牌。预期标记为“;”。第1行,位置150。源=系统。

  • 主要内容:RxJava 转换操作符 介绍,RxJava 转换操作符 示例RxJava 转换操作符 介绍 以下是用于转换从 Observable 发出的信息的运算符。 运算符 描述 Buffer 定期将 Observable 中的项目收集到包中,然后发出包而不是项目。 FlatMap 用于嵌套的 observable。将项目转换为 Observable。然后将项目展平为单个 Observable。 GroupBy 将一个 Observable 分成按键组织的一组 Obs

  • 我想优化我的代码,避免错误,我有这个功能,但我认为我可以改善和避免内存问题。 该函数的思想是接收这种样式的字符串“0123456789”并将其传递给0x01、0x23、0x45、...在无符号字符数组中。任何提示,良好的实践或改进将是非常有用的。 用法是这样的: 在函数缓冲区中结束如下:

  • 我有一个 Elasticsearch 的搜索查询,它使用一个时髦的内联脚本,我需要将其转换为 Painless 语言 如您所见,这获取了“事件开始日期”,去掉了时间(设置为00:00:00) 然后与当前日期(dtnow)进行比较,如果小于当前日期,则将其更改为当前日期(实际上没有过去的日期,只有今天以后的日期) 我不是一个Java程序员,我相信无痛的日期处理已经改变,所以希望转换上述? 谢谢