最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果

 更新時(shí)間:2021年07月23日 14:55:16   作者:Msy丿P  
這篇文章主要為大家詳細(xì)介紹了Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果,控制臺(tái)可以對(duì)空格進(jìn)行移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖,供大家參考,具體內(nèi)容如下

二維數(shù)組可以自己隨意定義大小,通過(guò)方法判斷來(lái)實(shí)現(xiàn)對(duì)所有的數(shù)字進(jìn)行隨機(jī)打亂,并可以通過(guò)移動(dòng)來(lái)正確還原,并可以判斷0(表示空格)是否可以移動(dòng),是否在范圍內(nèi)。

public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int[][] arrays = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } };
  int sum = 1;
  String direction;
  bianLi(arrays);
  daLuanErWeiShuZu(arrays);
  System.out.println("========================================");
  while (true) {
   bianLi(arrays);
   if (isOk(arrays)) {
    break;
   }
   sum++;
   try {
    Thread.sleep(500);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println("請(qǐng)輸入移動(dòng)方向(W 上、S 下、A 左、D 右)");
   direction = scanner.next();
   switch (direction) {
   case "W":
   case "w":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "上", arrays);

    break;
   case "S":
   case "s":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "下", arrays);
    break;
   case "A":
   case "a":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "左", arrays);
    break;
   case "D":
   case "d":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "右", arrays);
    break;
   default:
    System.out.println("非法輸入,重新輸入");
    break;
   }
  }
  System.out.println("一共走了" + sum + "步");
  System.out.println("挑戰(zhàn)成功");

}

判斷當(dāng)前坐標(biāo)是否可以移動(dòng)

/**
  * 判斷當(dāng)前坐標(biāo)是否可以移動(dòng)
  * 
  * @param arrays
  * @return 可以移動(dòng)返回true
  */
 public static boolean isYiDong(int[][] arrays) {
  int returnX = returnX(arrays);
  int returnY = returnY(arrays);
  System.out.println(returnX + ":" + returnY);
  if (returnX >= 0 && returnX + 1 < arrays.length && returnY >= 0 && returnY + 1 < arrays.length) {
   return true;
  }
  return false;
 }

獲取當(dāng)前0所在行的具體地址

 // 獲取0所在行的位置
 public static int returnX(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    if (0 == arrays[i][j]) {
     return i;
    }
   }
  }
  return -1;
 }

獲取當(dāng)前0所在列的具體地址

 // 獲取0所在列的位置
 public static int returnY(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    if (0 == arrays[i][j]) {
     return j;
    }
   }
  }
  return -1;
 }

二維數(shù)組隨機(jī)打亂,需要判斷左上角、右上角、左下角、右下角、中間、上中、下種、左中、右中,那些方向可以移動(dòng),生成隨機(jī)數(shù)來(lái)確定移動(dòng)方向

// 二維數(shù)組隨機(jī)打亂
 public static void daLuanErWeiShuZu(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    // 左上
    if (i == 0 && j == 0) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向右邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
     }
    }

    // 右上
    if (i == 0 && j == arrays[0].length - 1) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
     }
    }

    // 左下
    if (i == arrays.length - 1 && j == 0) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
     }
    }

    // 右下
    if (i == arrays.length - 1 && j == arrays[i].length - 1) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
     }
    }

    // 上中
    if (i == 0 && j > 0 && j < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
    // 左中
    if (j == 0 && i > 0 && i < arrays.length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;

     default:
      break;
     }
    }
    // 下中
    if (i == arrays.length - 1 && j > 0 && j < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
    // 右中
    if (j == arrays[i].length - 1 && i > 0 && i < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;

     default:
      break;
     }
    }
    if (i > 0 && j > 0 && i < arrays.length - 2 && j < arrays[i].length - 2) {
     switch (oneToThree(4)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;
     case 3:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
   }
  }
 }

該方法實(shí)現(xiàn)對(duì)0的位置和需要替換位置數(shù)據(jù)的替換,并對(duì)0范圍進(jìn)行驗(yàn)證,怕0出現(xiàn)數(shù)組下標(biāo)越位。

/**
  * 根據(jù)輸入的數(shù)據(jù),對(duì)二維數(shù)組進(jìn)行數(shù)據(jù)替換
  * 
  * @param i         高位坐標(biāo)
  * @param j         地位坐標(biāo)
  * @param direction 移動(dòng)方向
  * @param arrays    需要交換數(shù)據(jù)的數(shù)組
  */
 public static void tiHuanShuZuWeiZhi(int i, int j, String direction, int[][] arrays) {
  int tem = -1;
  switch (direction) {
  case "上":
   if (i > 0) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i - 1][j];
    arrays[i - 1][j] = tem;
   }
   break;
  case "下":
   if (i < arrays.length - 1) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i + 1][j];
    arrays[i + 1][j] = tem;
   }
   break;
  case "左":
   if (j > 0) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i][j - 1];
    arrays[i][j - 1] = tem;
   }
   break;
  case "右":
   if (j < arrays.length - 1) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i][j + 1];
    arrays[i][j + 1] = tem;
   }
   break;

  default:
   break;
  }
 }

完整代碼如下

import java.util.Random;
import java.util.Scanner;

public class Demo {
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int[][] arrays = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } };
  int sum = 1;
  String direction;
  bianLi(arrays);
  daLuanErWeiShuZu(arrays);
  System.out.println("========================================");
  while (true) {
   bianLi(arrays);
   if (isOk(arrays)) {
    break;
   }
   sum++;
   try {
    Thread.sleep(500);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println("請(qǐng)輸入移動(dòng)方向(W 上、S 下、A 左、D 右)");
   direction = scanner.next();
   switch (direction) {
   case "W":
   case "w":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "上", arrays);

    break;
   case "S":
   case "s":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "下", arrays);
    break;
   case "A":
   case "a":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "左", arrays);
    break;
   case "D":
   case "d":
    tiHuanShuZuWeiZhi(returnX(arrays), returnY(arrays), "右", arrays);
    break;
   default:
    System.out.println("非法輸入,重新輸入");
    break;
   }
  }
  System.out.println("一共走了" + sum + "步");
  System.out.println("挑戰(zhàn)成功");

 }

// /**
//  * 判斷當(dāng)前坐標(biāo)是否可以移動(dòng)
//  * 
//  * @param arrays
//  * @return 可以移動(dòng)返回true
//  */
// public static boolean isYiDong(int[][] arrays) {
//  int returnX = returnX(arrays);
//  int returnY = returnY(arrays);
//  System.out.println(returnX + ":" + returnY);
//  if (returnX >= 0 && returnX + 1 < arrays.length && returnY >= 0 && returnY + 1 < arrays.length) {
//   return true;
//  }
//  return false;
// }

 /**
  * 
  * @param arrays 需要驗(yàn)證的數(shù)據(jù)
  * @return 成功返回true
  */
 public static boolean isOk(int[][] arrays) {
  int sum = 1;
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays.length; j++) {
    if (sum == 9) {
     sum = 0;
    }
    if (arrays[i][j] != sum) {
     return false;
    }
    sum++;
   }
  }
  return true;
 }

 // 獲取0所在行的位置
 public static int returnX(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    if (0 == arrays[i][j]) {
     return i;
    }
   }
  }
  return -1;
 }

 // 獲取0所在列的位置
 public static int returnY(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    if (0 == arrays[i][j]) {
     return j;
    }
   }
  }
  return -1;
 }

 // 遍歷二維數(shù)組
 public static void bianLi(int[][] arrays) {
  for (int[] is : arrays) {
   for (int is2 : is) {
    System.out.print(is2 + "\t");
   }
   System.out.println();
  }
 }

 // 二維數(shù)組隨機(jī)打亂
 public static void daLuanErWeiShuZu(int[][] arrays) {
  for (int i = 0; i < arrays.length; i++) {
   for (int j = 0; j < arrays[i].length; j++) {
    // 左上
    if (i == 0 && j == 0) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向右邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
     }
    }

    // 右上
    if (i == 0 && j == arrays[0].length - 1) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
     }
    }

    // 左下
    if (i == arrays.length - 1 && j == 0) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
     }
    }

    // 右下
    if (i == arrays.length - 1 && j == arrays[i].length - 1) {
     // 根據(jù)生成的隨機(jī)數(shù)確定向左邊邊移動(dòng)還是向下移動(dòng)
     if (ouShuOrJiShu()) {
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
     } else {
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
     }
    }

    // 上中
    if (i == 0 && j > 0 && j < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
    // 左中
    if (j == 0 && i > 0 && i < arrays.length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;

     default:
      break;
     }
    }
    // 下中
    if (i == arrays.length - 1 && j > 0 && j < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
    // 右中
    if (j == arrays[i].length - 1 && i > 0 && i < arrays[i].length - 1) {
     switch (oneToThree(3)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;

     default:
      break;
     }
    }
    if (i > 0 && j > 0 && i < arrays.length - 2 && j < arrays[i].length - 2) {
     switch (oneToThree(4)) {
     case 0:
      tiHuanShuZuWeiZhi(i, j, "上", arrays);
      break;
     case 1:
      tiHuanShuZuWeiZhi(i, j, "右", arrays);
      break;
     case 2:
      tiHuanShuZuWeiZhi(i, j, "下", arrays);
      break;
     case 3:
      tiHuanShuZuWeiZhi(i, j, "左", arrays);
      break;

     default:
      break;
     }
    }
   }
  }
 }

 /**
  * 判斷是否是偶數(shù)
  * 
  * @return 偶數(shù)返回true
  */
 public static boolean ouShuOrJiShu() {
  return new Random().nextInt(1000) % 2 == 0 ? true : false;
 }

 /**
  * 
  * @param n 需要模的值
  * @return 返回0-(n-1)的值
  */
 public static int oneToThree(int n) {
  return new Random().nextInt(1000) % n;
 }

 /**
  * 根據(jù)輸入的數(shù)據(jù),對(duì)二維數(shù)組進(jìn)行數(shù)據(jù)替換
  * 
  * @param i         高位坐標(biāo)
  * @param j         地位坐標(biāo)
  * @param direction 移動(dòng)方向
  * @param arrays    需要交換數(shù)據(jù)的數(shù)組
  */
 public static void tiHuanShuZuWeiZhi(int i, int j, String direction, int[][] arrays) {
  int tem = -1;
  switch (direction) {
  case "上":
   if (i > 0) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i - 1][j];
    arrays[i - 1][j] = tem;
   }
   break;
  case "下":
   if (i < arrays.length - 1) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i + 1][j];
    arrays[i + 1][j] = tem;
   }
   break;
  case "左":
   if (j > 0) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i][j - 1];
    arrays[i][j - 1] = tem;
   }
   break;
  case "右":
   if (j < arrays.length - 1) {
    tem = arrays[i][j];
    arrays[i][j] = arrays[i][j + 1];
    arrays[i][j + 1] = tem;
   }
   break;

  default:
   break;
  }
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring配置文件無(wú)法讀取properties屬性的解決

    Spring配置文件無(wú)法讀取properties屬性的解決

    這篇文章主要介紹了Spring配置文件無(wú)法讀取properties屬性的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • MyBatisPlus代碼生成器的原理及實(shí)現(xiàn)詳解

    MyBatisPlus代碼生成器的原理及實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了MyBatisPlus中代碼生成器的原理及實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MyBatisPlus有一定幫助,需要的可以參考一下
    2022-08-08
  • java創(chuàng)建子類對(duì)象設(shè)置并調(diào)用父類的變量操作

    java創(chuàng)建子類對(duì)象設(shè)置并調(diào)用父類的變量操作

    這篇文章主要介紹了java創(chuàng)建子類對(duì)象設(shè)置并調(diào)用父類的變量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Spring中容器創(chuàng)建的四種方式示例

    Spring中容器創(chuàng)建的四種方式示例

    這篇文章主要介紹了Spring中容器創(chuàng)建的四種方式示例,Spring容器是Spring框架的核心部分,它負(fù)責(zé)管理和組織應(yīng)用程序中的對(duì)象,它提供了一種輕量級(jí)的、非侵入式的方式來(lái)實(shí)現(xiàn)對(duì)象的創(chuàng)建、依賴注入和生命周期管理,需要的朋友可以參考下
    2023-10-10
  • java將圖片至暗的實(shí)現(xiàn)方法

    java將圖片至暗的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇java將圖片至暗的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java線性結(jié)構(gòu)中的雙向鏈表實(shí)現(xiàn)原理

    Java線性結(jié)構(gòu)中的雙向鏈表實(shí)現(xiàn)原理

    這篇文章將給大家詳細(xì)講解雙向鏈表的內(nèi)容,尤其是會(huì)通過(guò)代碼來(lái)進(jìn)行鏈表的操作,文中的代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 如何查看java進(jìn)程內(nèi)存占用情況

    如何查看java進(jìn)程內(nèi)存占用情況

    這篇文章主要介紹了如何查看java進(jìn)程內(nèi)存占用情況問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java支付寶即時(shí)到帳提交訂單功能

    java支付寶即時(shí)到帳提交訂單功能

    這篇文章主要為大家詳細(xì)介紹了java支付寶即時(shí)到帳提交訂單功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SpringMVC與前端交互案例教程

    SpringMVC與前端交互案例教程

    本篇文章主要介紹了SpringMVC前端和后端數(shù)據(jù)交互總結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。希望能給你帶來(lái)幫助
    2021-07-07
  • java基礎(chǔ)理論Stream管道流Map操作示例

    java基礎(chǔ)理論Stream管道流Map操作示例

    這篇文章主要未大家介紹了java基礎(chǔ)理論Stream管道流Map操作方法示例解析,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03

最新評(píng)論

荔波县| 锦州市| 长葛市| 福清市| 新郑市| 平武县| 观塘区| 英吉沙县| 三河市| 洛扎县| 陕西省| 通河县| 诏安县| 建昌县| 信宜市| 宽城| 山东| 东乌珠穆沁旗| 精河县| 桐城市| 开封市| 和林格尔县| 威远县| 贡嘎县| 望城县| 澄迈县| 利川市| 涞源县| 芮城县| 大理市| 海林市| 临清市| 汉川市| 青海省| 南充市| 靖安县| 谢通门县| 怀柔区| 江阴市| 凤山市| 哈尔滨市|