iT邦幫忙

0

[Mac][Java]陣列解析問題

  • 分享至 

  • xImage

大家好,我是程式撰寫新手,望請各位大神多多指點小弟。
近期在線上尋找Java撰寫的題目,
[題目]
解析輸入數值,每個數值中間會以空白格隔開,並使用迴圈印出拆解得值

[問題]
我在程式中使用 split(" ")方式拆解後,再用迴圈方式將資料印出,可是背景出現此錯誤訊息,是哪的環節有錯誤嗎?
https://ithelp.ithome.com.tw/upload/images/20200217/20119847Cv8gtWdInn.png

[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]);	
		}	
	}
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
一級屠豬士
iT邦大師 1 級 ‧ 2020-02-17 23:52:16
最佳解答

錯誤訊息的意思是: 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++)
試試看,另外注意到 ; 之間 三個運算式, 我都加上空格, = 以及 < 左右也是,以提高可讀性.

你遇到的問題,是初學者時常會遇到的,祝你在學習程式語言的旅途中,能享受到樂趣.

看更多先前的回應...收起先前的回應...

加送一張官方文件圖(有點小)

Austin7L iT邦新手 5 級 ‧ 2020-02-18 23:19:40 檢舉

大師你好,首先先感謝你的指點,目前將原先命名的split 改用splitedStr命名,並且明白java陣列由0開始。
可是我發現一個問題,在程式中陣列長度會抓到4,但陣列是從0開始放的,所以搭配迴圈時,會多印出splitedStr[4],可是此索引並沒有值,通常這種情況會以什麼方式做撰寫呢?

[Error]
https://ithelp.ithome.com.tw/upload/images/20200218/201198478jAX5RV1kx.png

[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

一級屠豬士
諄諄善誘,莫此為甚
/images/emoticon/emoticon32.gif

Austin7L iT邦新手 5 級 ‧ 2020-02-20 12:57:44 檢舉

一級屠豬士
感謝您的耐心指點,原來是少注意到了這邊,謝謝您。
/images/emoticon/emoticon16.gif

這個都會發生的, 還有零(0)跟O , 字型 全形半形,一些符號,
還有tab與空白,一大堆驚喜.

我要發表回答

立即登入回答