😭很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)又称贾宪三角、贾宪芝形、二项式三角形、新杨辉三角、帕斯卡三角形, 是二项式系数的一种写法,其性质极为丰富,是组合数学中一个重要的数学对象。杨辉三角中的数值可以使用组合数公式计算,揭示了一系列重要的组合恒等式。
如果我的回答解决了您的问题,请采纳!
Scanner scan=new Scanner(new File("D:"+ File.separator+"testFileContent.txt"));
scan.useDelimiter("\n");//设置读取分隔符
while(scan.hasNext()){
System.out.println(scan.next());
}
scan.close();
如果要逐行或基于某些Java正则表达式读取文件,则使用Scanner类。扫描程序使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。 然后,可以使用各种下一种方法将生成的令牌转换为不同类型的值。 扫描器类未同步,因此不是线程安全的。