打印出来自数组中所选项目的特定字母(Java)

时间:2014-11-17 16:06:25

标签: java arrays

我是非常非常新的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

4 个答案:

答案 0 :(得分:0)

编译器通过将每个char值值的操作数('B' + 'A' + 'T''B''A')提升为int值来评估常量表达式'T',该过程称为扩大原始转换

查看ASCII表(http://www.asciitable.com/)以获取每个char的值:

  • B = 66
  • A = 65
  • T = 84

所以'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);