Saya memiliki semua sel saya yang disimpan dalam ArrayList dan saya ingin memeriksa berapa banyak ranjau yang dikelilinginya (tambang adalah sel dengan png saya bukan nol). Saya berpikir untuk memeriksa posisi -1, +1, -9, +9, -10, +10, -11, +11 relatif terhadap setiap sel dan menambahkan 1 ke penghitung di dalam objek sel. Masalahnya adalah saya keluar dari batas dan tidak tahu bagaimana menghindarinya.

for (Cell cell: cells){
        if ((cells.get(cells.indexOf(cell) - 1).mine != null)&&((cells.indexOf(cell) - 1) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 1).mine != null)&&((cells.indexOf(cell) + 1) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 10).mine != null)&&((cells.indexOf(cell) - 10) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 10).mine != null)&&((cells.indexOf(cell) + 10) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 11).mine != null)&&((cells.indexOf(cell) - 11) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 11).mine != null)&&((cells.indexOf(cell) + 11) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 9).mine != null)&&((cells.indexOf(cell) - 9) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 9).mine != null)&&((cells.indexOf(cell) + 9) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
    }

Abaikan kode spageti yang selalu saya refactor saat semuanya berfungsi.

-1
Jds Wolf 12 Mei 2021, 09:33

1 menjawab

Jawaban Terbaik

Saya berpikir untuk memeriksa posisi -1, ...

Pikiran itu sayangnya tidak berhasil.

Pertama-tama, Anda "meng-hardcode" dimensi daftar "seharusnya 2 redup" ke dalam angka-angka ini. Bagaimana jika Anda mengubah kisi menjadi 20x20. Maka -10 tidak ada artinya.

Kemudian: agak jelas bahwa untuk banyak slot, -10 atau +10 tidak akan berfungsi.

Anda dapat membuat metode pemeriksa sederhana seperti:

boolean isValidIndex(int cellIndex, int offset) {
  // not doing your homework for you, but rest assured
  // this method is easy to implement

Yang kemudian Anda gunakan seperti:

if (isValidIndex(cells.indexOf(cell), 9))

Sebagai contoh.

0
GhostCat 12 Mei 2021, 06:43