package com.company;
//現在給定若干個n×m的地雷陣,請你計算出每個矩陣
// 中每個單元格相鄰單元格內地雷的個數,每個單元格
// 最多有8個相鄰的單元格。 0<n,m<=100
// ? 輸入格式:
// 輸入包含若干個矩陣,對于每個矩陣,第一行包含兩個整數n
// 和m,分別表示這個矩陣的行數和列數。接下來n行每行包含m
// 個字符。安全區域用‘.’表示,有地雷區域用'*'表示。當
// n=m=0時輸入結束。
// ? 輸出格式
// 對于第i個矩陣,首先在單獨的一行里列印序號:“Field
// #i:”,接下來的n行中,讀入的'.'應被該位置周圍的地雷數
// 所代替。輸出的每兩個矩陣必須用一個空行隔開。
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true)
{//輸入矩陣
System.out.println("輸入地雷陣行列數:");
int count = 0;
System.out.print("行數:");
int n = input.nextInt();
System.out.print("列數:");
int m = input.nextInt();
if (n == m && n == 0) {
break;
}
count++;
char[][] a = new char[n + 1][m + 1];
System.out.println("輸入地雷矩陣:");
for (int i = 0; i < n + 1; i++) {
a[i] = input.nextLine().toCharArray();
}
System.out.println("Field#" + count + ":");//輸出矩陣
deal(a,n,m);
}
}
private static void deal(char[][] a, int n, int m)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] == '*') {
System.out.print("*");
continue; //跳過本次回圈,執行下一次回圈
}
int count = 0;
//輪詢上下左右8個點
for (int k = i - 1; k <= i + 1; k++) {
for (int l = j - 1; l <= j + 1; l++) {
//注意邊界
if (k >= 0 && k < n && l >= 0 && l < m && a[k][l] == '*')
count++;
}
}
System.out.print(count);
}
System.out.println();
}
}
}
uj5u.com熱心網友回復:
編譯器說出錯的是deal函式里面的這句 if (a[i][j] == '*')Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
不太懂為什么啊@-@
uj5u.com熱心網友回復:
看看n,m的值和二維陣列的長度轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/99017.html
標籤:Java SE
上一篇:j2ee連接資料庫,洗掉和修改表里的資料,如何點擊顯示對話框,點擊確認執行操作,點擊取消則不執行操作,求解惑?(用javascript來實作的)
下一篇:這里servlet哪里設定錯了
