二维数组
二维数组的声明:(三种形式)
-
int[][] intArray;
-
float floatArray[][];
-
double[] doubleArray[];
//创建数组
intArray=new int[3][3];//创建了一个3行3列的二维数组
赋值:
intArray[1][2]=9;//为第2行第3列的元素赋值为9
声明数组的同时进行创建:
char[][] ch=new char[3][5];
创建二维数组时,可以只指定行数,之后的每行相当于一个一维数组,需要重新创建,每行的元素个数可以不一样
floatArray=new float[3][];
floatArray[0]=new float[3];//第一行创建3列
floatArray[1]=new float[4];//第2行创建4列
floatArray[2]=new float[5];//第3行创建5列
二维数组的初始化
int[][] num={{78,68},{65,76,34},{89}};
//大括号的个数为行数,每个大括号里面的元素个数为所在行数的列数
循环输出二维数组的内容:
方法
使用对象名调用方法
解决一类问题的代码的有序组合,是一个功能模块。
方法的声明和调用
方法声明:
语法格式:
访问修饰符 返回类型 方法名(参数列表){
方法体
}
public static void main(String[] args){
System.out.println("hello,imooc!");
}
修饰符:public
protected
private
返回类型
方法名:与变量名命名一致
根据方法是否带参数、是否返回值,分为四类
-
无参无返回值方法
一行打印输出一串星号
package com.imooc.method; public class MethodDemo { //定义一个无参无返回值的方法,输出一行星号 public void printStar() { System.out.println("************************************************************"); } public static void main(String[] args) { //创建一个MethodDemo类的对象myMethodDemo MethodDemo myMethodDemo=new MethodDemo(); //使用对象名.方法名();调用方法 myMethodDemo.printStar(); System.out.println("欢迎欢迎!"); myMethodDemo.printStar(); } }
-
无参带返回值方法
package com.imooc.method; public class Rectangle { //定义一个求长方形面积的方法 public int area() { int length=10; int width=5; int getArea=length*width; return getArea; } public static void main(String[] args) { // 创建对象 Rectangle rt=new Rectangle(); System.out.println("长方形的面积为:"+rt.area()); } }
-
带参无返回值方法
package com.imooc.method; public class MaxDemo { public void max(float a,float b) { float max=0; if(a<b) { max=b; } if(a>b) { max=a; } System.out.println("两个数"+a+"和"+b+"的最大值为:"+max); } public static void main(String[] args) { // MaxDemo maxDemo=new MaxDemo(); int a=5,b=10; maxDemo.max(a, b); float m=9.8f,n=8.8f; maxDemo.max(m, n); maxDemo.max(6.6f, 3.33f); } }
-
带参带返回值方法
package com.imooc.method; public class FacDemo { public int fac(int n) {//定义求阶乘的方法 int s=1; for(int i=1;i<=n;i++) { s*=i; } return s; } public static void main(String[] args) { //用方法求5的阶乘 FacDemo ff=new FacDemo(); int a=ff.fac(5); System.out.println("5的阶乘为:"+a); //求1-5的阶乘累加和 int sum=0; for(int i=1;i<=5;i++) { a=ff.fac(i); sum+=a; } System.out.println("1-5的阶乘累加和为:"+sum); } }
方法的定义在类的内部定义
方法一般定义在主方法之前,放在后面也不影响
方法不能嵌套定义
数组作为方法参数
package com.imooc.method;
public class ArrayMethod {
public void printArray(int[] arr) {//打印输出一维数组的元素
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a= {1,2,3,4,5};
ArrayMethod am=new ArrayMethod();
am.printArray(a);
}
}
//查找数组元素的值
package com.imooc.method;
import java.util.Scanner;
public class ArraySearch {
public boolean search(int n,int[] arr) {
boolean flag=false;
for(int i=0;i<arr.length;i++) {
if(arr[i]==n) {
flag=true;
}
}
return flag;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,2,3,4,5};
System.out.println("请输入一个需要查找的数字:");
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
ArraySearch ss=new ArraySearch();
boolean flag=ss.search(m, a);
if(flag)System.out.println("找到了");
else System.out.println();
sc.close();
}
}
方法重载
方法名相同,参数列表(数量、数据类型等)不同
//定义3个方法,实现int、double、和数组类型和的问题
package com.imooc.method;
public class MaxDemo1 {
public int plus(int m,int n) {
return m+n;
}
public double plus(double m,double n) {
return m+n;
}
public int plus(int[] arr) {
int sum=0;
for(int i=0;i<arr.length;i++) {
sum+=arr[i];
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int m=9,n=8;
MaxDemo1 aa=new MaxDemo1();
int a=aa.plus(m, n);
System.out.println("int类型的和为:");
System.out.println(a);
System.out.println("double类型的和为:");
double d=aa.plus(6.6, 7.7);
System.out.println(d);
System.out.println("数组类型的和为:");
int[] b= {1,2,3,4,5};
int arr=aa.plus(b);
System.out.println(arr);
}
}
参数的传递问题
普通变量传值
//对两个变量的值进行交换并打印输出
一个类中可以定义多个方法,主方法中进行调用方法时需要事先进行定义对象
参数在传递过程中,方法中的形参在变化,函数中的实际参数值并没有发生变化
而在方法中调用方法时,可以直接使用方法
package com.imooc.method;
public class ExchangeDemo {
public void swap(int a,int b) {
int temp;
System.out.println("交换前:a="+a+",b="+b);
temp=a;
a=b;
b=a;
System.out.println("交换后:a="+a+",b="+b);
}
public void sswap(int m,int n) {
System.out.println("交换前的m="+m+",n="+n);
swap(m, n);//注意这里的调用,方法中调用方法
System.out.println("交换后的m="+m+",n="+n);
}
public static void main(String[] args) {
//
int m=4,n=5;
ExchangeDemo ee=new ExchangeDemo();
ee.sswap(m, n);
}
}
数组作为方法参数的传值问题
与普通变量传值不同,主方法中的数组在进行自定义方法的调用后,主方法中数组的值也会相应发生变化
//数组指向了同一片内存空间
可变参数列表
public void sum(int... n){}; //int... n;定义可变参数
package com.imooc.method;
public class ArgsDemo1 {
public void sum(int... n) {
int sum=0;
for(int i:n) {
sum=sum+i;
}
System.out.println("sumary="+sum);
}
public static void main(String[] args) {
//
ArgsDemo1 aa=new ArgsDemo1();
aa.sum(1); //参数数量可变
aa.sum(1,2);
aa.sum(23,22,11);
}
}
参数列表中如果有两个以上的参数,可变参数一定是在最后的
package com.imooc.method;
public class ArgsDemo2 {
public void search(int m,int... n) {//注意值了的可变参数位置,如果不是在最后,会报错
boolean flag=false;
for(int i:n) {
if(m==i) flag=true;
}
if(flag) {
System.out.println("找到了"+m);
}else {
System.out.println("没找到"+m);
}
}
public static void main(String[] args) {
//
ArgsDemo2 aa=new ArgsDemo2();
aa.search(3,1,2,3,4,5);
//这里与数组之间的用法
int[] arr= {1,2,3,4,5,6};//最后程序运行成功即能说明,可以将数组传递给可变参数列表
aa.search(2, arr);
}
}
可以将数组传递给可变参数列表
关于有可变参数的方法重载
在方法定义中,会认为当前的两个search方法重复定义,而不是重载
数组作为参数时,不能将多个值传递给数组
一个方法只能有一个可变参数
可变参数的方法是最后被访问的
文档注释
生成文档注释:
命令行–>转到文件目录下–>输入命令
javadoc -d doc 文件名.java
会生成一个doc目录文件,打开index.html 查看
//小错误:容易出现编码错误
javadoc -d doc 文件名.java -encoding utf-8 -charset utf-8 -d path
方法的调试
按F5 键可以跳到方法内调试
F7 由方法内部返回调用处