java用scanner语句构建杨辉三角详细解析

😭很ji,java课要上去讲代码,啥也不会,想求一个超详细的讲解(代码是搜的,但是真的一步也看不懂😭teacher要提问)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入杨辉三角的层数:");
        int n = sc.nextInt();

        int[][] yanghui = new int[n][n];
        // 初始化第一列和对角线上的值
        for (int i = 0; i < n; i++) {
            yanghui[i][0] = 1;
            yanghui[i][i] = 1;
        }
        // 计算每个数的值
        for (int i = 2; i < n; i++) {
            for (int j = 1; j < i; j++) {
                yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
            }
        }
        // 输出杨辉三角
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(yanghui[i][j] + " ");
            }
            System.out.println();
        }
    }
}

为您添加了注解。看不懂可以继续问我。


 public static void main(String[] args) {
        //从控制台读取将要输入的数字,
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入杨辉三角的层数:");
        int n = sc.nextInt();//n是杨辉三角的层数
         
        //定义一个nxn的二维数组用于存储杨辉三角中每个位置的值
        int[][] yanghui = new int[n][n];
        // 初始化第一列和对角线上的值
        for (int i = 0; i < n; i++) {
            yanghui[i][0] = 1;//第一列的值全是1
            yanghui[i][i] = 1;//对角线上的值全是1
        }
        // 计算每个数的值
        for (int i = 2; i < n; i++) {//从第二行开始循环,循环n-1次
            for (int j = 1; j < i; j++) {//从第1列开始循环,循环i-1次,因为第i行只有i-1列
                yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]; //第i行第j列的值=第i-1行第j-1列的值+第i-1行第j列的值,
            }
        }
        // 输出杨辉三角
        for (int i = 0; i < n; i++) {//共n行,循环n次
            for (int j = 0; j <= i; j++) {//第i行有i,所以循环i次,比如,第一行有1列
                System.out.print(yanghui[i][j] + " ");//输出一个值,以空格隔开
            }
            System.out.println();//每输出完一行数字后换行,继续输出下一行
        }
    }

哪里不懂?

就是申明一个二维数组,第一列,对角线都是1,然后每一个值都等于上一行前一列跟上一行当前列的和,然后把值存放在二维数组里,再循环打印出来,

哪部分不懂,整体逻辑:
首先:创建了一个 n * n 的二维数组 yanghui 来存储杨辉三角的每个数。
然后:初始化第一列和对角线上的值为 1,用两个 for 循环,i 代表行数,j 代表列数,当 j=0 或者 i=j 时,yanghui[i][j] 赋值为 1,表示每一行的开头和结尾都是 1。
最后:计算每个数的值,从第三行开始计算,每行不处理第一个和最后一个数,当前数等于上一行相邻两数之和。用两个 for 循环,i 代表行数,j 代表列数,遍历整个二维数组,若 i>=2 且 j 不等于 0 和 i,计算当前的 yanghui[i][j] 值:yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]。

Java:杨辉三角
可以借鉴下

package Mar0313;
 
import java.util.Scanner;
 
public class Demo01 {
    public static void main(String[] args) {
        //键盘录入数字n
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入一个数字n");
        int n = sc.nextInt();
        int[][] arr = new int[n][];                 //定义一个行数为n,列数不确定的二维数组
 
        //二维数组的赋值:
        for (int i = 0; i < arr.length; i++) {      //遍历数组,给每一行开辟空间
            arr[i] = new int[i + 1];                //计算每行的空间;例如i=0时第一行的数组大小为1,所以第一行只有一个元素,后面以此类推
            for (int j = 0; j < arr[i].length; j++) {   //j控制列数
                if (j == 0 || j == arr[i].length - 1) { //因为杨辉三角每一行的第一个元素和最后一个元素都是1,所以判断如果j=0||j=arr[i].length是元素为1
                    arr[i][j] = 1;                      //给每一行的第一列和最后一列赋值为1
                } else {
                    arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];//当前元素的值为上一行相邻两个元素的和(如图所示)
                }
            }
        }
 
        //遍历二维数组:
        for (int k = 0; k < arr.length; k++) {  //二位数组的遍历,控制行数
            for (int j = 1; j <= n - k; j++) {  //控制每行空格的循环
                System.out.print("  ");         //输出每行前面的空格用来调整结果,使结果呈现出三角形形状
            }
            for (int j = 0; j < arr[k].length; j++) {//控制列数,遍历二维数组
                System.out.print(arr[k][j] + "    ");
            }
            System.out.println();                   //输出每行元素完了之后,换行
        }
    }
}
 

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这段代码使用了二维数组来存储杨辉三角的每一个数值,利用循环来计算每个数值,最后输出杨辉三角的结果。

首先, Scanner 类是 Java 中的一个输入类,通过该类可以获取用户在控制台中输入的数据,这里通过 sc.nextInt() 获取用户输入的数字,即杨辉三角的层数,存放在变量n中。

接下来,通过二维数组 yanghui 存储杨辉三角数据,其中第一列和对角线上的数字都赋值为1,即:

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

接着,计算杨辉三角中的每个数字。从第三行开始,每个数都等于它上面的数和左上角的数相加,即:yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j]

for (int i = 2; i < n; i++) {
    for (int j = 1; j < i; j++) {
        yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
    }
}

最后,通过循环输出杨辉三角的结果:

for (int i = 0; i < n; i++) {
    for (int j = 0; j <= i; j++) {
        System.out.print(yanghui[i][j] + " ");
    }
    System.out.println();
}

代码已经很详细了,这里再补充一下杨辉三角的概念:杨辉三角(Pascal's triangle)又称贾宪三角、贾宪芝形、二项式三角形、新杨辉三角、帕斯卡三角形, 是二项式系数的一种写法,其性质极为丰富,是组合数学中一个重要的数学对象。杨辉三角中的数值可以使用组合数公式计算,揭示了一系列重要的组合恒等式。
如果我的回答解决了您的问题,请采纳!