![](/img/trans.png)
[英]Java: retrieving and printing out items from an arraylist using getters
[英]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' + '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.