亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.Array Index Out Of Bounds Exception in for loop

.Array Index Out Of Bounds Exception in for loop

ibeautiful 2023-06-08 19:31:54
Eclipse IDE 抱怨使用/訪問書籍數組的 for 循環越界。它抱怨的第 (19) 行是: if (books[x] == null) {我不相信這是它抱怨的問題,因為我已經用許多不同的東西替換了它,但它仍然在抱怨。一行是 for 循環的第一行 for (int x = 0; x < capacity ; ++x)我也三重檢查了條件是否正確,應該是。容量為 5,這意味著對象位置數組將位于 0、1、2、3、4,因此根據我對數組的了解,從 0 開始 x 應該是正確的。庫類(帶循環的)    package exercises;    public class Library {        private int capacity;        private Book[] books = new Book[capacity];        public Library(int capacity) {            if (capacity > 1) {                this.capacity = capacity;            }            else {                this.capacity = 4;            }        }        public boolean addBook(Book book) {            int freeLocation = -1;            @SuppressWarnings("unused")            int notFreeLocation = -1;            for (int x = 0; x < capacity ; ++x) {                if (books[x] == null) { /*this is line 19*/                    freeLocation = x;                }                else {                    notFreeLocation = x;                }            }            if (freeLocation == -1) {                return false;            }            else {                books[freeLocation] = book;                return true;            }        }我在 exercises.Library.addBook(Library.java:19) 和 exercises.LibraryApp.main(LibraryApp.java:8) 處收到錯誤“線程“主”java.lang.ArrayIndexOutOfBoundsException 中的異常:0”
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

當這完成時Library:


private int capacity;

private Book[] books = new Book[capacity];

super()構造函數中的代碼尚未運行(這些初始化在最開始 [或在子類之后] 插入到構造函數中)。所以capacity有它的默認值,0。后來你分配給capacity,但為時已晚。


反而:


public class Library {

    private int capacity;

    private Book[] books;                     // *** Don't initialize it here

    public Library(int capacity) {

        if (capacity > 1) {

            this.capacity = capacity;

        }

        else {

            this.capacity = 4;

        }

        this.books = new Book[this.capacity]; // *** Initialize it here

    }

但是這里還有另一個有用的東西要學。在遍歷數組或類似數組時,使用數組的大小知識,而不是其他信息源 ( capacity)。所以:


for (int x = 0; x < this.books.length ; ++x) {

// -----------------^^^^^^^^^^^^^^^^^

堅持真相的主要來源。capacity:-)(事實上,您可能根本不需要您的實例成員。)


查看完整回答
反對 回復 2023-06-08
  • 1 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號