繁体   English   中英

从数组中选择的项目中打印出特定的字母(Java)

[英]printing out specific letters from chosen items from an array (Java)

我非常非常不熟悉Java,因此很抱歉,如果我看不到这件事,我深表歉意。 我正在我的大学学习Java课程,而我们才刚刚开始学习数组。 我们分配了一个简单的练习:

编写一个程序,创建一个名为Bob,Ann和Tom的数组(名称)。 程序应遍历数组,并将每个名称的首字母作为单词打印出来(“ 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结尾。我还尝试了将char转换为该线程中提到的字符串的方法; 我仍然以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

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

看一下ASCII表( http://www.asciitable.com/ ),以获取每个字符的值:

  • 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");

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));

以下代码是可能的解决方案:

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")进行换行

您必须将这些字母串联起来:

System.out.print(names[0].charAt(0) +""+ names[1].charAt(0) +""+ names[2].charAt(0) + "\n");

因为在您的情况下,您对这些字符的ASCII码求和而不是对其进行串联,因此,您得到215。

或将其值分配给您的initials字符串,然后打印它:

initials+=names[0].charAt(0);
initials+=names[1].charAt(0); 
initials+=names[2].charAt(0);
System.out.print(intitials);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM