62,614
社区成员
发帖
与我相关
我的任务
分享
import java.util.*;
public class Test {
public static void main(String[] args) {
int[] result1=getList(4,5);
int[] result2=getList(4,4);
System.out.println(Arrays.toString(result1));
System.out.println(Arrays.toString(result2));
}
public static int[][] getMatrix(int rowNum,int columnNum){
int[][] result=new int[rowNum][columnNum];
int num=0;
int start=0;
int snf=0;
if((columnNum&1)==1){
start=columnNum/2;
}else{
start=columnNum/2-1;
}
for(int i=rowNum-1;i>=0;i--){
int index=start;
if((columnNum&1)==1){
snf=-1;
}else{
snf=1;
}
for(int j=0;j<columnNum;j++){
result[i][index]=num++;
index=index+(j+1)*snf;
snf*=-1;
}
}
return result;
}
public static int[] getList(int rowNum,int columnNum){
int[][] result=getMatrix( rowNum,columnNum);
int [] resultList=new int[rowNum*columnNum];
int index=0;
for(int i=0;i<result.length;i++){
for(int j=0;j<result[i].length;j++){
resultList[index++]=result[i][j];
}
}
return resultList;
}
public static void printMatrix(int[][] result){
for(int i=0;i<result.length;i++){
for(int j=0;j<result[i].length;j++){
System.out.printf("%5d",result[i][j]);
}
System.out.println();
}
}
}
public class WabbleMatrix {
private int[][] data;
public WabbleMatrix(int rows, int cols) {
this.data = new int[rows][cols];
build(rows, cols);
}
// 构造数组内容
private void build(int rows, int cols) {
int max = rows * cols - 1; // 要填入的第一个数字
int row_pointer = 0; // 当前行
int[] col_pointers = {-1, cols}; // 当前列(两个指针)
int currentpointer = 0; // 当前使用的列指针(0 或 1)
while (max >= 0) {
currentpointer = getCurrentPointer(col_pointers, currentpointer);
data[row_pointer][col_pointers[currentpointer]] = max;
max--;
// 如果两个列指针相邻就移到下一行,并重新摆正列指针位置
if (touched(col_pointers)) {
row_pointer++;
col_pointers = new int[]{-1, cols};
currentpointer = 0;
}
}
}
// 在两个列指针之间切换,并移动列指针
private int getCurrentPointer(int[] pointers, int currentpointer) {
currentpointer = (currentpointer + 1) % pointers.length;
if (currentpointer == 0) {
pointers[currentpointer] = pointers[currentpointer] + 1;
} else {
pointers[currentpointer] = pointers[currentpointer] - 1;
}
return currentpointer;
}
// 判断两个列指针是否相邻
private boolean touched(int[] pointers) {
return pointers[0] + 1 == pointers[1];
}
// 格式化输出
public String toString() {
String str = "";
for (int[] rows : data) {
for (int item : rows) {
str += String.format("%5d", item);
}
str += "\n";
}
return str;
}
// 程序入口
public static void main(String[] args) {
WabbleMatrix matrix = new WabbleMatrix(4, 5);
System.out.println(matrix);
System.out.println();
matrix = new WabbleMatrix(4, 4);
System.out.println(matrix);
}
}
public class Test {
public static void main(String[] args) {
int[][] result1=getMatrix(4,4);
int[][] result2=getMatrix(5,5);
System.out.println("4X4");
printMatrix(result1);
System.out.println("5X5");
printMatrix(result2);
}
public static int[][] getMatrix(int rowNum,int columnNum){
int[][] result=new int[rowNum][columnNum];
int num=0;
int start=0;
int snf=0;
if((columnNum&1)==1){
start=columnNum/2;
}else{
start=columnNum/2-1;
}
for(int i=rowNum-1;i>=0;i--){
int index=start;
if((columnNum&1)==1){
snf=-1;
}else{
snf=1;
}
for(int j=0;j<columnNum;j++){
result[i][index]=num++;
index=index+(j+1)*snf;
snf*=-1;
}
}
return result;
}
public static void printMatrix(int[][] result){
for(int i=0;i<result.length;i++){
for(int j=0;j<result[i].length;j++){
System.out.printf("%5d",result[i][j]);
}
System.out.println();
}
}
}
public void doCR(int c,int r){
if(c%2==0){//偶数列
for(int i=r;i>0;i--){
int j1=c*i;int j2=c*(i-1);int j3=j1-2;
while(j3>j2){
System.out.print(j3+" ");
j3=j3-2;
}
j3=j2;
System.out.print(j3+" ");
j3++;
while(j3<j1){
System.out.print(j3+" ");
j3=j3+2;
}
System.out.println("");
}
}
else{//奇数列
for(int i=r;i>0;i--){
int j1=c*i;int j2=c*(i-1);int j3=j1-2;
while(j3>j2){
System.out.print(j3+" ");
j3=j3-2;
}
j3=j2;
while(j3<j1){
System.out.print(j3+" ");
j3=j3+2;
}
System.out.println("");
}
}
}