重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
将你其中某些问题的答案放在代码注释中了.
在埇桥区等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作按需定制,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,成都外贸网站制作,埇桥区网站建设费用合理。
这个程序输出的是固定的九宫格,我想,是根据固有的九宫格中的数字与数组下标的关系来写的代码。
希望对你有所帮助,加油!
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=1;i=9;i++){
//给数组赋值
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=0;i3;i++){
for(int j=0;j3;j++){
System.out.print(arr[i][j]+" ");
}
System.out.print("\n");//从你的程序中将此语句上移到此位置
}
}
}
/*直接复制运行就可以,每一行的九个数字代表一个九宫格的9个数字,从左到右,从上到下*/
import java.util.ArrayList;
import java.util.Arrays;
public class Test1 {
private static ArrayListString arrangeList = new ArrayListString();
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=0;k9;k++){
arr[k]=Integer.parseInt(str1.substring(k,k+1));
}
if(arr[0]+arr[1]+arr[2]==15arr[3]+arr[4]+arr[5]==15arr[6]+arr[7]+arr[8]==15arr[0]+arr[3]+arr[6]==15arr[1]+arr[4]+arr[7]==15arr[2]+arr[5]+arr[8]==15arr[0]+arr[4]+arr[8]==15arr[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;
}
}
要求:根据输入的数字n,如:3,5,7...以矩阵显示n行n列数,这些数由1~n*n构成,要求矩阵的每行每列及对角线上n个数之和相等 预备知识: 在距阵中,1在第一行正中,随后的数字应放到上一个数字的右上方方格中,如果向上不行,就放到该列的最下方格子;如果向右不行,就放到该行的最左边;如果都不行,就放到上一个数字的正下方;如果目标格子中已经有数字,也放到上一个数字的正下方 思路: 1) 使用2维数组预备存储1~n*n这些数字 2) 1是放到第一行正中的,所以其索引号是:[0][(n-1)/2] 3) 随后的数字,其索引号原则如下 1 num的行索引为 num-1 的 (行索引-1) , num的列索引为 num-1 的 (列索引+1) 2如果发现num的行,列索引都越位(-1或n),则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 3如果发现num的行,列索引指向的位置已经有数字,则 num的行索引为 num-1 的 (行索引+1) , num的列索引为 num-1 的 (列索引) 4如果发现num的行越位(-1),则 num的行索引为n-1 5如果发现num的列越位(n),则 num的列索引为0 import java.util.Scanner; public class JiuGong { public static void main(String[] args) { Scanner s = new Scanner(System.in); int x = s.nextInt(); //输入长度 int h = 0; //行 //在距阵中,1在第一行正中 int l = x / 2; //列 int[][] a = new int[x][x]; for (int i = 1; i = x * x; i++) { a[h][l] = i; //运行提示溢出 //随后的数字应放到上一个数字的右上方方格中 h--; l++; //3.如果都不行,就放到上一个数字的正下方 if (h 0 l = x) { //先返回上一个数字 h++; l--; //再下移一行 h++; } //1.如果向上不行,就放到该列的最下方格子 else if (h 0) { h = x - 1; } //2.如果向右不行,就放到该行的最左边 else if (l = x) { l = 0; } //4.如果目标格子中已经有数字,也放到上一个数字的正下方 else if (a[h][l] 0) { //先返回上一个数字 h++; l--; //再下移一行 h++; } } //打印九宫格 for (int j = 0; j x; j++) { for (int k = 0; k x; k++) { System.out.print(a[j][k] + " "); } //换行 System.out.println(); } } }
采纳哦