日期:2014-05-20  浏览次数:20658 次

救命100求一个简单问题!在线等,立即结帐!
用java打一个二维数组
像这样的数组:要求是能从cmd输入一个数字n,打一个n行n列的矩阵!急急急,再线等!
8   1   6  
3   5   7
4   9   2

------解决方案--------------------
这样的题目在学校里的时候研究过,是奇数的话比较好做,但是是偶数的话好像麻烦了一点。有规律的。不过不会描述
------解决方案--------------------
8 1 6
3 5 7
4 9 2
怎么出来的?
帮顶
------解决方案--------------------
矩阵的值是如何出来的?随机生成?还是键盘输入?不过这两种情况程序都不复杂啊~~
------解决方案--------------------
package csdn;

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

public class Test2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] toPrint = getRndNum(n * n);

for (int i = 0; i < n * n; i++) {
System.out.print(toPrint[i] + "\t ");
if ((i+1) % n == 0)
System.out.println();
}
}

public static int[] getRndNum(int n)
{

int[] rnd = new int[n];
int[] notRnd = new int[n];

for (int i = 0; i < n; i++) {
notRnd[i] = i + 1;
}

Random random = new Random();
int m = n;
int mm = 0;
for (int i = 0; i < n; i++) {
if (m == 0) {
mm = 0;
}
else {
mm = random.nextInt(m);
}
rnd[i] = notRnd[mm];
notRnd[mm] = notRnd[m - 1];
m--;
}
return rnd;
}
}
------解决方案--------------------
强!
mark!
------解决方案--------------------
路过
------解决方案--------------------
package temp;
import java.util.*;

public class Magic{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println( "输入n ");
int n = in.nextInt( );
int m[][]=new int[n][n];
int i,j,number;
i=0;j=n/2;
m[i][j]=1;
for(number=2;number <n*n;number++){
if(m[(i-1+n)%n][(j+1)%n]==0){
i=(i-1+n)%n;j=(j+1)%n;
}
else{
i=(i+1)%n;
}
m[i][j]=number;
}
for(i=0;i <n;i++){
for(j=0;j <n;j++){
System.out.print(m[i][j]+ "\t ");
}
System.out.println( " ");
}
}
}
------解决方案--------------------
学习
------解决方案--------------------
学习
------解决方案--------------------
justicesun()
写得不错,只是少写了一句
应该在m[i][j]=1;
后面加上一句
m[n-1][j]=n*n;
------解决方案--------------------
课堂上做过,当时要求是奇数,

算法是:
1、n行n列的二维数组,1放在第一行中间,以后都放在前一个数的右上角的格里
2、如果出了上边界,就到最后一行,如果出了右边界,就放到第一列
3、如果要放的位置已有数,就退回来,放到自己的下面
4、用一个函数专门生成下一个数的位置,也就是一对下标,可以用一个数组返回
5、循环,放一个数,取一个位置,在放数,在取
6、返回位置的函数可以用static属性记录上一个返回的位置,也可以用参数传进来上一个数的位置,然后不管出不出界,列+1,行-1,然后用多个if-else判断是否出界,如果行出看列出不出,做完处理后看这个位置有没有数,如果有,在回来,在行+1,然后返回位置
------解决方案--------------------