promotion image of download ymail app
Promoted
NASA 發問時間: 電腦與網際網路程式設計 · 5 年前

關於ArrayList 的問題

想要輸入一個個字母 最後印出一串string

一直出現錯誤 ~~ 有人可以告訴我該怎麼改 ?

import java.util.*;

import java.util.Scanner;

public class ArrayTest1 {

public static void main(String[] args){

ArrayList<String> list = new ArrayList<String>(); //創造一個string array

char value;

Scanner scanner= new Scanner(System.in);

do {

value = scanner.next(); //輸入char

list.add(value);

} while(true); //按空格鍵就跳出來

System.out.println(list); //最後再印出這個Array

}

}

已更新項目:

Lucas 大大

我全部改string

do {

value = scanner.next(); //輸入char

list.add(value);

System.out.println(list); ----------> 這樣印出來就可以

} while (true);

System.out.println(list); ---------> 為何這樣子會出錯 ?

1 個解答

評分
  • Lucas
    Lv 6
    5 年前
    最佳解答

    這裡面有兩個問題:

    1你自己已經把問題點出來了喔!

    ArrayList<String> list = new ArrayList<String>(); //創造一個「string」 array

    char value;

    list.add(value);

    怎麼會把char放進string arrayList?

    你有兩種方式可以改:

    1 把list改成ArrayList<Character>

    2 把value改成String

    2next()傳回的是String物件,可是你硬要把String塞到一個char裡面,當然會爆掉

    要改的話,有兩種方法:

    1把scanner.next()改成char

    你不可能直接(char)(scanner.next()),因為這樣等於甚麼都沒改,但是你可以:

    不管輸入了多少字,「只」接收第一個字母(比較技術性,也比較聰明)

    因為next()傳回的是String,但我們要用char來接收他傳回來的資料

    而你不可能把整個String壓縮成一個char,所以只能選擇「不管輸入多少字,我只收第一個」

    所以先到String的API(函數庫)裡面挖挖看,有哪些函數是傳回char的(網址放在下面了,可是是英文)

    結果只找到一個

    charcharAt(int index)

    Returns the char value at the specified index.

    翻譯:

    傳回類型:char  函數名稱:charAt  參數:一個指標(int)

    傳回在String裡的那個指標上的字元

    看來這就是我們要的了

    常識:第一個字的指標永遠是0,所以不用擔心不知道第一個字的指標是甚麼

    我們只須要做:

    value = scanner.next().charAt(0);

    這樣不管他輸入幾千幾百個字,你都只會擷取第一個字,然後把她傳給value

    也不會因為value 是個char 而scanner.next() 是個string而起衝突

    2把value改成String

    2015-02-17 11:44:27 補充:

    這個是java內建的一個功能,有點難解釋

    是這樣的:

    在你那個do while迴圈裡面,你的條件式是放true,意思是他會一直跑下去

    而在你的迴圈裡面你也沒有放一個break,goto之類的東西,所以沒有東西可以停止你的迴圈

    java會認為說,你這個迴圈永。遠。不。會。結。束,所以這個迴圈之後的東西永。遠。不。會。被。執。行

    他就會覺得很奇怪,既然你迴圈後面的東西不會被執行,幹嘛放東西?所以給你一個compiling error,提醒你「後面的不需要放因為沒有用」

    這種error叫做unreachable code,不可達的程式碼

    2015-02-17 11:46:27 補充:

    要修好就只要加一個判斷式或類似的東西讓你的迴圈會停止就好了

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。