Java学习第二周(1)--方法与一维数组

本文深入探讨了Java中方法的声明、调用及递归算法,并详细解析了一维数组的声明、初始化与遍历过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:由于学习环境为JDK1.8,所有有关Java的代码均在JDK1.8环境中测试通过,若环境发生变换,代码可能会发生错误。

     本周的学习难度较上周有明显提升,尤其是涉及到了各种算法的使用和理解,需要更多的练习和归纳。

1.方法的声明与调用

(1)Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段

声明格式:[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){
                              程序代码;                                                可以有参数,也可以没有参数
                             [return 返回值]; 跳出方法、返回结果
                     }

(2)参数有两种:    形式参数(形参):在方法定义时用于接收外界输入的数据。
                               实际参数(实参):调用方法时实际传给方法的数据。

说明:本节涉及到的方法是由static修饰的静态方法。

(3)方法参数的传递:  1.如果传递的参数是基本数据类型,那么方法接收到的实际上是这个数据的值拷贝(值副本)。

                                      2.如果传递的参数是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。

(4)方法返回值:     如果方法没有返回值,返回值类型为void

                                如果方法有返回值, 方法中必须使用关键字return返回该值,返回值类型为该返回值的类型

                                如果在方法中直接写return,而没有返回值,则方法结束。

(5)方法的调用:   直接调用:方法名(实参列表);

                              类名调用:类名.方法名(实参列表);

                              对象调用:对象.方法名(实参列表);实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。

***递归算法(难点)

递归调用:指的是方法执行过程中出现该方法本身的调用。

递归算法的两个条件:(1)递归出口(结束条件)         (2)逐层递推向出口逼近

课堂练习:汉诺塔

package com.abc;
import java.util.Scanner;
public class Honoi {
public static int count=1;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入圆盘个数:");
int num=scan.nextInt();
hanoi(num,'A','B','C');
scan.close();
}
public static void hanoi(int num,char start,char help,char dest){
if(num==1){
System.out.println("这是第"+count+"步移动,从"+start+"移动到"+dest);
count++;
}
else{
hanoi(num-1,start,dest,help);
System.out.println("这是第"+count+"步移动,从"+start+"移动到"+dest);
count++;
hanoi(num-1,help,start,dest);
}
}
}

运行结果:


课后练习:编写一个计算器,实现加减乘除

package com.abc;
import java.util.Scanner;
public class Calculate {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("请输入第一个数:");
int firstNum=scan.nextInt();
System.out.print("请输入第二个数:");
int secondNum=scan.nextInt();
System.out.print("请选择要进行哪种运算?(输入加/减/乘/除)  ");
String sel=scan.next();
int result=calculate(firstNum,secondNum,sel);
System.out.print(result);
scan.close();
}
public static int calculate(int a,int b,String oper){
int sum=0;
switch(oper){
case "加":
System.out.print("a加b等于");
sum=a+b;
break;
case "减":
System.out.print("a减b等于");
sum=a-b;
break;
case "乘":
System.out.print("a乘b等于");
sum=a*b;
break;
case "除":
System.out.print("a除b等于");
sum=a/b;
break;
}
return sum;
}
}

运行结果:

2.一维数组的声明、初始化与遍历

  数组是一个变量,存储相同数据类型的一组数据

(1)数组的声明、分配空间、赋值

**声明数组: 告诉计算机数据类型是什么

格式:数据类型    数组名[ ] ; 声明数组时不规定数组长度 

           数据类型[ ]  数组名 ; 

**分配空间: 告诉计算机分配几个连续的空间

声明数组并分配空间:数据类型[ ]  数组名   =   new   数据类型[大小]  ;       

**赋值:向分配的格子里放数据(eg:score[0] = 89;)

(2)一维数组的静态初始化:在声明数组时还可以直接指定数组的具体内容。
   格式:数据类型[]  数组名={初值0,初值1,…,初值n};
   eg: int[] score={65,59,73,71,98,66};

(3)遍历数组方式

1.  通过for循环获取数组元素的下标,然后遍历对应元素
      例如:  for(int i=0;i<array.length;i++){ length为数组长度属性
                         System.out.println(array[i]);
                   }

2.  foreach输出
 
  for(数据类型 变量名称:数组名称){...}     

 例如: for(int x:array){
                  // x为当前正在遍历的数组元素
              }

课堂练习:数组的遍历

package array;
public class ArrayDemo {
public static void main(String[] args) {
int[] a=new int[3];
a[1]=15;
a[2]=7;
System.out.println("遍历第一个数组:");
for(int i=0;i<a.length;i++){   
System.out.print(a[i]+"  ");
}
System.out.println();
int[] b={13,53,67,26,78};   
System.out.println("遍历第二个数组:");
for(int i=0;i<b.length;i++){   
System.out.print(b[i]+"  ");
}
System.out.println();
System.out.println("使用foreach方式遍历数组:");
for(int x:b){
System.out.print(x+"  ");
}
System.out.println();
}
}

运行结果:


3.补充:方法的可变参数

格式:返回值类型  方法名称(类型…  参数名称){}

eg.void show(int... a){ }
注意:向方法传递可变参数后,参数在方法内部是以数组的形式保存下来的。

<think>嗯,用户想学习如何用Java一维数组进行成绩统计。首先,我需要回顾一下Java一维数组的基本操作,比如声明、初始化和遍历。然后,结合用户提供的引用内容,看看有没有相关的例子可以参考。 用户提供的引用[1]里有一个例子,统计90分以上的学生人数。这可能是一个很好的起点。代码里用了Scanner来读取输入,先获取学生人数,然后循环录入成绩到数组中,接着遍历数组统计符合条件的成绩数量。这个例子虽然简单,但涵盖了数组的基本使用和顺序查找的方法。 不过,用户可能需要的不仅仅是统计特定分数的人数,可能还包括其他统计功能,比如计算平均分、最高分、最低分等。所以,我应该扩展这个例子,添加更多的统计功能,让用户了解如何综合运用数组来处理多个统计需求。 接下来,要注意代码的正确性和最佳实践。例如,在引用[1]的代码中,数组的大小被固定为100,这可能导致资源浪费或者数组越界的问题。更好的做法是根据输入的学生人数动态创建数组,比如int[] scores = new int[num]; 这样更合理,也更节省内存。 另外,引用[3]提到了录入学生信息,但代码示例不完整。可能需要补充如何正确地从用户那里获取输入并存储到数组中,确保循环的索引正确,避免出现索引错误。例如,在Java中数组索引是从0开始的,而引用[1]的代码里循环是从1开始,这可能导致数组索引越界,特别是当num等于100的时候,scores[100]会超出数组的范围,因为数组的大小是100,最大索引是99。所以需要纠正这个错误,将循环改为从0开始到num-1,或者调整数组的大小为num+1,但更推荐标准的从0开始的索引。 此外,用户可能需要了解如何处理异常输入,比如非整数的输入,但根据引用中的例子,可能暂时不需要涉及异常处理,保持简单即可。 最后,按照用户的要求,生成相关问题,这些问题应该围绕Java数组的使用、统计功能的扩展、性能优化等方面,帮助用户进一步巩固知识。</think>### Java一维数组实现成绩统计的方法 #### 一、实现步骤 1. **输入学生人数** 使用`Scanner`类读取用户输入的整数作为学生人数,例如: ```java Scanner input = new Scanner(System.in); int num = input.nextInt(); // 输入学生总数 ``` 2. **创建数组并录入成绩** 根据学生人数动态创建数组,并通过循环录入成绩: ```java int[] scores = new int[num]; // 动态创建数组 for (int i = 0; i < num; i++) { // 索引从0开始 scores[i] = input.nextInt(); } ``` 3. **统计功能实现** - **统计90分人数** 遍历数组,统计符合条件的成绩: ```java int count = 0; for (int score : scores) { if (score == 90) { count++; } } System.out.println("90分人数:" + count); ``` - **扩展统计功能** 可添加平均分、最高分等计算: ```java int sum = 0, max = 0; for (int score : scores) { sum += score; if (score > max) max = score; } System.out.println("平均分:" + (sum / num)); System.out.println("最高分:" + max); ``` #### 二、完整代码示例 ```java import java.util.Scanner; public class ScoreStatistics { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 1. 输入学生人数 System.out.print("输入学生人数:"); int num = input.nextInt(); // 2. 创建数组并录入成绩 int[] scores = new int[num]; System.out.println("输入" + num + "个成绩:"); for (int i = 0; i < num; i++) { scores[i] = input.nextInt(); } // 3. 统计功能 int count90 = 0, sum = 0, max = scores[0]; for (int score : scores) { if (score == 90) count90++; sum += score; if (score > max) max = score; } System.out.println("90分人数:" + count90); System.out.println("平均分:" + (sum / num)); System.out.println("最高分:" + max); } } ``` #### 三、关键点说明 1. **数组索引从0开始** 正确使用`for (int i = 0; i < num; i++)`避免越界错误[^3]。 2. **动态数组创建** 根据输入人数确定数组大小,节省内存空间。 3. **增强可读性** 使用`foreach`循环遍历数组更简洁[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值