大家好,我是程式撰寫新手,望請各位大神多多指點小弟。
近期在線上尋找Java撰寫的題目,
[題目]
解析輸入數值,每個數值中間會以空白格隔開,並使用迴圈印出拆解得值
[問題]
我在程式中使用 split(" ")方式拆解後,再用迴圈方式將資料印出,可是背景出現此錯誤訊息,是哪的環節有錯誤嗎?
[Code]
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] split = str.split(" ");
for (int k=1;k<=split.length;k++) {
System.out.println(split[k]);
}
}
}
錯誤訊息的意思是: Array Index Out Of Bounds Exception : 4
陣列(Array) 的 Index 超出邊界了, index值等於 4 的時候.
另外你有沒有觀察到 , 是先列印出 2, 接著印出 3 4, 然後就發生錯誤了.
建議你試試看把 k 與 array[k] 一起列印出來,觀察一下.你這裡的 array 叫 split,其實不太好,因為這是動詞,而且是跟 split()函數一樣,後續不利於查找.可以取做 splitedStr 之類的.
在程式語言中array的index, 偏向資訊工程,一般是由 0 開始的比較多.
另外有些偏向應用的,會由1開始.例如 R的vector, Lua的Table當初要給一些其他方面的科學家
或工程師好上手,會設計成由1開始.
你這裡改成 for (int k = 0; k < split.length; k++)
試試看,另外注意到 ; 之間 三個運算式, 我都加上空格, = 以及 < 左右也是,以提高可讀性.
你遇到的問題,是初學者時常會遇到的,祝你在學習程式語言的旅途中,能享受到樂趣.
加送一張官方文件圖(有點小)
大師你好,首先先感謝你的指點,目前將原先命名的split 改用splitedStr命名,並且明白java陣列由0開始。
可是我發現一個問題,在程式中陣列長度會抓到4,但陣列是從0開始放的,所以搭配迴圈時,會多印出splitedStr[4],可是此索引並沒有值,通常這種情況會以什麼方式做撰寫呢?
[Error]
[Code]
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] splitedStr = str.split(" ");
System.out.println("陣列長度: "+splitedStr.length);
for (int k = 0; k <= splitedStr.length; k++) {
System.out.println("k = "+k);
System.out.println("splitedStr["+k+"] = "+splitedStr[k]);
}
}
}
0, 1, 2, 3 <= 長度是4, 最大的是 3.
所以要把 k <= splitedStr.length 改成 k < splitedStr.length