Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java can';我找不到如何编程这个数字模式_Java - Fatal编程技术网

Java can';我找不到如何编程这个数字模式

Java can';我找不到如何编程这个数字模式,java,Java,我被要求输入一个数字rc,并基于rc构造这个模式。我可以初始化表格,但没有突出显示的数字: int [][] num2 = new int [rc][rc]; counter = 1; for(int i = 0; i < rc; i++){ if(i!=0) counter--; for(int j =0; j < rc; j++){ num2 [i] [j] = counter;

我被要求输入一个数字rc,并基于rc构造这个模式。我可以初始化表格,但没有突出显示的数字:

int [][] num2 = new int [rc][rc];
counter = 1;

    for(int i = 0; i < rc; i++){
        if(i!=0)
        counter--;
        for(int j =0; j < rc; j++){
            num2 [i] [j] = counter;
            counter ++;
        }
    }
int[]num2=新的int[rc][rc];
计数器=1;
对于(int i=0;i

有什么提示或想法吗?

你有一部分是对的。每行上打印的数字相同,但起点每次递增1。因此,您可以再次使用变量i来移动它

int [][] num2 = new int [rc][rc];
int counter = 1;

for (int i = 0; i < rc; i++) {
    for (int j = 0; j < rc; j++) {
        num2[i][(j + i) % rc] = counter++;
    }
}
int[]num2=新的int[rc][rc];
int计数器=1;
对于(int i=0;i
以下代码可以很好地解决您的问题

int rc=5;
        int [][] num2 = new int [rc][rc];
        int counter = 1;
            for(int i = 0; i < rc; i++){
                for(int j =i; j < rc; j++){
                    num2 [i] [j] = counter;
                    counter ++;
                }
                for(int k =0; k < rc; k++){
                    if(num2[i][k]==0){
                        num2 [i] [k] = counter;
                        counter++;
                    }
                    System.out.print(num2[i][k]+"\t");
                }
                System.out.println();
            }
int rc=5;
int[][]num2=新的int[rc][rc];
int计数器=1;
对于(int i=0;i
我的解决方案背后的逻辑是:

  • 首先从
    1-N
    填充一个数组,其中
    N
    是用户输入(或
    rc
    在这种情况下):
  • 然后,我们检查它是否不是第一行,如果是,我们只是打印 数字按顺序排列
  • 现在,我们必须知道哪些数字先出现:

    • 在第1行(请记住它从0开始),它必须打印[1][0]中[1][4]处的数字,因此我们的循环减去
      rc-i+j
      ,得到:5-1+0,实际上是索引[4]
    • 我们知道,在我们先打印最后的数字之后,我们必须继续这个序列,所以我们在[1][1]处打印索引:[1][0](为什么是1,2?因为否则我们会得到下面的例子,这就是为什么我们需要将1减去它的原因

      1    2    3    4    5
      10   7    8    9    10
      
就这样:

public class StrangePattern {

    public static void main(String[] args) {
        int rc = 5;

        int number = 1;
        int spaces = 0;

        int[][] numbers = new int[rc][rc];

        for (int i = 0; i < rc; i++) {
            for (int j = 0; j < rc; j++) {
                numbers[i][j] = number;
                number++;
            }
        }

        for (int i = 0; i < rc; i++) {
            for (int j = 0; j < rc; j++) {
                if (i != 0) {
                    if (j < i) {
                        System.out.print(numbers[i][rc - i + j] + "\t");
                    } else {
                        System.out.print(numbers[i][j - spaces] + "\t");
                    }
                } else {
                    System.out.print(numbers[i][j] + "\t");
                }
            }
            spaces++;
            System.out.println();
        }
    }
}
对于
rc=3
,这个是:

1   2   3   
6   4   5   
8   9   7   

比我的溶液清洁得多:)+1
1   2   3   
6   4   5   
8   9   7