當前位置:編程學習大全網 - 編程語言 - 用壹個圖形化界面實現蛇形矩陣,最好用Java語言!急!!!

用壹個圖形化界面實現蛇形矩陣,最好用Java語言!急!!!

public class SnakeMatrix {

private int[][] data;

private int index;

private int direct;

public static void main(String[] args) {

SnakeMatrix s = new SnakeMatrix(50);

s.print();

}

public SnakeMatrix(int i) {

if (i < 1) {

System.out.println("參數錯誤");

System.exit(0);

}

index = i;

data = new int[i][i];

for (int j = 0; j < i; j++) {

for (int k = 0; k < i; k++) {

data[j][k] = 0;

}

}

direct = 0;

// manageData();

manageDataByMath();

}

public void manageDataByMath() {

for (int i = 0; i < index; i++) {

for (int j = 0; j < index; j++) {

data[i][j] = getDataByPosition(i, j);

}

}

}

public int getLevByPosition(int i, int j) {

int mid = (int) index / 2;

int tempi, tempj;

if ((i + 1) > mid) {

tempi = index - i - 1;

} else {

tempi = i;

}

if ((j + 1) > mid) {

tempj = index - j - 1;

} else {

tempj = j;

}

if (tempi < tempj)

return tempi + 1;

return tempj + 1;

}

public int getDataByPosition(int i, int j) {

int lev = getLevByPosition(i, j);

// 每壹層左上角第壹個元素的值

int startIndex = 0;

// 計算這個值

for (int temp = 1; temp < lev; temp++) {

startIndex += ((index - 2 * temp) * 4 + 4);

}

return startIndex + getAdd(i, j, lev) + 1;

}

public int getAdd(int i, int j, int lev) {

int add = 0;

// 每壹層的邊長

int levEdge = index - 2 * (lev - 1);

if (i + 1 == (index - (lev - 1))) {

// 這壹層的倒數第壹行

add = 2 * levEdge - 1 + (index - lev - 1 - j);

} else if (i + 1 == lev) {

// 這壹層的第壹行

add = j - lev + 1;

} else {// 中間行

if (j > ((int) index / 2)) {

add = levEdge + i - lev;

} else {

add = levEdge + levEdge - 2 + levEdge + (index - lev - i - 1);

}

}

return add;

}

private void changeDirect() {

direct = (direct + 1) % 4;

}

private boolean check(int j, int k) {

if (direct == 0) {

if ((k + 1) == index) {

return false;

} else if (data[j][k + 1] != 0) {

return false;

}

} else if (direct == 1) {

if ((j + 1) == index) {

return false;

} else if (data[j + 1][k] != 0) {

return false;

}

} else if (direct == 2) {

if (k == 0) {

return false;

} else if (data[j][k - 1] != 0) {

return false;

}

} else {

if (j == 0) {

return false;

} else if (data[j - 1][k] != 0) {

return false;

}

}

return true;

}

public void manageData() {

int j = 0;

int k = 0;

data[j][k] = 1;

for (int i = 2; i < index * index + 1; i++) {

// 判斷能否合法賦值

while (!check(j, k)) {

changeDirect();

}

if (direct == 0) {

k++;

} else if (direct == 1) {

j++;

} else if (direct == 2) {

k--;

} else {

j--;

}

data[j][k] = i;

}

}

public void print() {

for (int i = 0; i < index; i++) {

for (int j = 0; j < index; j++) {

if (data[i][j] < 10) {

} else if (data[i][j] > 99) {

} else {

System.out.print(" " + data[i][j]);

}

}

System.out.println();

}

}

}

  • 上一篇:制作光盤自動播放菜單用什麽軟件好?
  • 下一篇:各位兄弟姐妹 怎樣才能健康減肥 給支點招吧
  • copyright 2024編程學習大全網