我是非常非常新的Java,如果这是非常明显的事情我很难道歉。我正在我的大学里学习Java课程,我们刚刚开始学习数组。我们被分配了一个简单的练习:
编写一个程序,用名称Bob,Ann创建一个数组(名称) &安培;汤姆。程序应该通过阵列打印出来 每个名字的第一个字母作为一个单词(“BAT”)。
我们有一种方法可以使用for循环来实现它,这个方法有效:
String [] names = {"Bob", "Ann", "Tom"};
String initials = "";
for (int i = 0; i < names.length; i++)
{
initials = initials + names[i].charAt(0);
}
System.out.print(initials);
但我想用另一种方式,使用 char.At()方法:
System.out.print(names[0].charAt(0) + names[1].charAt(0) + names[2].charAt(0) + "\n");
然而,输出是215而不是“BAT”。任何人都可以解释为什么会发生这种情况以及我的代码有什么问题?很多,非常感谢!
==== 编辑:
我现在尝试了chsdk,jgr208,Pier-Alexandre Bouchard和Gorfield建议的四种解决方案,但是没有一种方法可行。我仍然以215结尾。我也尝试过将字符转换为this thread中提到的字符串的方法;我仍然以215结束。这让我想到我的阵列声明可能有问题吗?有什么建议? 我在下面尝试过的代码详情。
String [] names = {"Bob", "Ann", "Tom"};
String initials = "";
initials = initials + names[0].charAt(0);
initials = initials + names[1].charAt(0);
initials = initials + names[2].charAt(0);
System.out.print(initials);
= 215
String [] names = {"Bob", "Ann", "Tom"};
String a = names[0].charAt(0) + "";
String b = names[1].charAt(0) + "";
String c = names[2].charAt(0) + "";
System.out.print("" + a + "" + b + "" + c + "");
= 215
String [] names = {"Bob", "Ann", "Tom"};
String a = new Character(names[0].charAt(0)).toString();
String b = new Character(names[1].charAt(0)).toString();
String c = new Character(names[2].charAt(0)).toString();
System.out.print("" + a + "" + b + "" + c + "");
= 215
String [] names = {"Bob", "Ann", "Tom"};
String a = Character.toString(names[0].charAt(0));
String b = Character.toString(names[1].charAt(0));
String c = Character.toString(names[2].charAt(0));
System.out.print("" + a + "" + b + "" + c + "");
= 215
String [] names = {"Bob", "Ann", "Tom"};
String a = String.valueOf(names[0].charAt(0));
String b = String.valueOf(names[1].charAt(0));
String c = String.valueOf(names[2].charAt(0));
System.out.println(a + "" + b + "" + c);
= 215
String [] names = {"Bob", "Ann", "Tom"};
System.out.printf("%s%s%s",names[0].charAt(0),names[1].charAt(0),names[2].charAt(0));
= 215
String [] names = {"Bob", "Ann", "Tom"};
System.out.print(names[0].substring(0));
System.out.print("\n");
System.out.print(names[1].substring(0));
System.out.print("\n");
System.out.print(names[2].substring(0));
System.out.println("");
= 215
String [] names = {"Bob", "Ann", "Tom"};
String initials = "";
initials+=names[0].charAt(0);
initials+=names[1].charAt(0);
initials+=names[2].charAt(0);
System.out.print(initials);
= 215
String [] names = {"Bob", "Ann", "Tom"};
System.out.print("" + names[0].charAt(0) + "" + names[1].charAt(0) + "" + names[2].charAt(0) + "\n");`
= 215
答案 0 :(得分:0)
编译器通过将每个char值值的操作数('B' + 'A' + 'T'
,'B'
和'A'
)提升为int值来评估常量表达式'T'
,该过程称为扩大原始转换。
查看ASCII表(http://www.asciitable.com/)以获取每个char的值:
所以'B' + 'A' + 'T'
等同于int常量66 + 65 + 84 = 215.
如果要打印BAT
,则需要创建一个新字符串。这样的事情应该有效:
System.out.print("" + names[0].charAt(0) + names[1].charAt(0) + names[2].charAt(0) + "\n");
答案 1 :(得分:0)
215是B + A + T(66 + 65 + 84)的ASCII总和,基本上不是连接它认为你正在添加它们的字符。你可以使用printf()
而不是普通的打印来解决这个问题:
System.out.printf("%s%s%s",names[0].charAt(0),names[1].charAt(0),names[2].charAt(0));
答案 2 :(得分:0)
以下代码是一种可能的解决方案:
System.out.print(names[0].substring(0));
System.out.print(names[1].substring(0));
System.out.print(names[2].substring(0));
System.out.println("");
您只需将每个字母分开打印,然后使用print("\n")
执行新行
答案 3 :(得分:0)
你必须连接这些字母:
System.out.print(names[0].charAt(0) +""+ names[1].charAt(0) +""+ names[2].charAt(0) + "\n");
因为在你的情况下,你正在总结那些Chars的ASCII码而不是连接它们,这就是你得到215的原因。
或者将其值分配给initials
字符串,然后将其打印出来:
initials+=names[0].charAt(0);
initials+=names[1].charAt(0);
initials+=names[2].charAt(0);
System.out.print(intitials);