import java.util.ArrayList
import java.util.Arrays
public class Test1 {
private static ArrayList<String> arrangeList = new ArrayList<String>()
public static void main(String[] args) {
String str = "123456789"//你要排列组合的字符串
char list[] = str.toCharArray()//将字符串转换为字符数组
genernateData(list, 0, list.length - 1)//参数为字符数组和0和字符数组最大下标
int arr[]=new int[9]
for(String str1 : arrangeList){
for(int k=0k<9k++){
arr[k]=Integer.parseInt(str1.substring(k,k+1))
}
if(arr[0]+arr[1]+arr[2]==15&&arr[3]+arr[4]+arr[5]==15&&arr[6]+arr[7]+arr[8]==15&&arr[0]+arr[3]+arr[6]==15&&arr[1]+arr[4]+arr[7]==15&&arr[2]+arr[5]+arr[8]==15&&arr[0]+arr[4]+arr[8]==15&&arr[2]+arr[4]+arr[6]==15){
System.out.println(Arrays.toString(arr))
}
}
}
public static void genernateData(char list[], int k, int m) {
if (k > m) {
StringBuffer sb = new StringBuffer()//创建一个StringBuffer对象sb
for (int i = 0 i <= m i++) {
sb.append(list[i])//循环将字符数组值追加到StringBuffer中
}
arrangeList.add(sb.toString())
} else {
for (int i = k i <= m i++) {
swapData(list, k, i)//将下表为k和i的值调换位置
genernateData(list, k + 1, m)
swapData(list, k, i)
}
}
}
private static void swapData(char list[], int k, int i) {
char temp = list[k]
list[k] = list[i]
list[i] = temp
}
}
这样和你说吧。 其实这个代码的目的是通用的奇数九宫格。
奇数九宫格先做成 斜线方阵
然后将超出部分填入对称的格中,这里就是 1 放到 8,6之间,3 放到4,8之间。
一开始的 a,b是为了定位 (1) 的格子,
a++,b++ 就是在斜向写数字, a,b%3 就是在超出格子后转到对称的位置。
i%3 其实就是写完一个 1,2,3的列,开始写4,5,6的斜行。
你看不明白,是因为这里带有数学算法。
将你其中某些问题的答案放在代码注释中了.这个程序输出的是固定的九宫格,我想,是根据固有的九宫格中的数字与数组下标的关系来写的代码。
希望对你有所帮助,加油!
class S{
public static void main(String[] args) {
int arr[][] = new int[3][3]
//创建一个三阶方阵
int a = 2
//第3行的行下标
//???这里是什么意思,2从何而来
//A:java中数组的下标从0开始
int b = 3/2
//第2列的列下标
//???同上
//A:这里由于b=1,(int)/(int),java中数组的下标从0开始
for(int i=1i<=9i++){
//给数组赋值
arr[a++][b++] = i
if(i%3==0){
//如果i是3的倍数——————???为什么要判断是不是3的倍数
a = a-2
//————————————————???if...else里面的语句是什么意思,作用是什么
b = b-1//————————————————???同上
}
//使a,b回到起点:a=2,b=1
else{
//如果i不是3的倍数//————————————————???同上
a = a%3
b = b%3
}
}
//????九宫格的每一行、每一列、对角线都等于15,
//???但是这里连一个15这个数字都没有出现,但还是成功输出
//————————————————————???他是怎么做到的
System.out.println("输出九宫格:")
//遍历输出九宫格
for(int i=0i<3i++){
for(int j=0j<3j++){
System.out.print(arr[i][j]+" ")
}
System.out.print("\n")//从你的程序中将此语句上移到此位置
}
}
}