1 方法的概述和格式说明
方法就是用来解决一类问题代码的有序组合,为了解决代码重复编写的问题,可以将重复的代码提取出来放在一个{}中,并为这段代码起个名字。这样每次在调用该功能时,只需通过这个名字来调用代码就可以了。
方法的定义:
修饰符 返回值类型 方法名(参数类型 参数名,){
函数体;
return 返回值;
}
方法头:是指方法的修饰符
返回值类型:return;
方法名: 定义方法的名字,必须使用合法的标识符;
方法的参数:当参数被调用时,传递值给参数;
方法的优点
- 是程序变得代码量减少
- 提高程序的维护
- 提高开发效率
- 提高代码的复用性
##方法的调用
1 有返回值的调用
-
单独调用,没有意义
-
输出调用,有意义,但是不够好,因为我们不一定非要把结果输出
-
赋值调用,推荐方式
例题:
//返回较大的数值
public static int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
return a>b?a:b;
}
警告:对带返回值而言,return 语句是必须的。
2 无返回值的调用
- 单独
- 输出调用(错误)
- 赋值调用(错误)
例题 1:
//打印星星 无返回值的使用
public static void show(int row,int col){
for(int i=1;i<=row;i++){
for(int j=1;j<=col;j++){
System.out.print("*");
}
System.out.println();
}
}
例题 2:
//打印乘法口诀表
public static void table(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
方法的注意事项
- 方法不调用不执行
- 方法与方法是平级关系,不能嵌套定义
- 方法定义的时候参数之间用逗号隔开
- 方法调用的时候不用在传递数据类型
- 如果方法有明确的返回值,一定要return带回一个值
方法的重载
方法重载概述:
- 在用一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同。
方法重载特点: - 与返回值无关,只看方法名和参数列表
- 在调用时,虚拟机通过参数列表的不同来区分同名方法
例题:
//方法的重载
public static int add(int a,int b,int c){
return a+b+c;
}
public static double add(int a,double b,int c){
return a+b+c;
}
public static double add(double m,double n){
return a+b;
}
public static double add(double a,double b){
return a+b;
}
public static char add(char a,char b){
return (char)(a+b);
}
public static int add(int a,int b){
return a+b;
}
数组
数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储具有相同类型的变量集合会更有用。
一维数组
为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元索类型。创建不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为 null。除非数组已经被创建,否则不能给它分配任何元素。
数组的定义格式
数据类型[ ] 数组名(推荐使用);
数据类型 数组名 [ ];
数组的大小和默认值
当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。
创建数组之后就不能再修改它的大小。可以使用 变量名.length 得到数组的大小。
当创建数组后,它的元素被賦予默认值,数值型基本数据类型的默认值为 0, char 型的默认值为 AuOOOO’,boolean 型的默认值为 false。
数组的初始化
数组初始化
- Java中的数组必须先初始化,然后才能使用
- 所谓初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋值数组的初始化方式
- 动态初始化:初始化时只指定数组长度,由系统为数组分配初
- 静态初始化:初始化时指定每个数组元素的数十只,由系统决定数组长度
例题 1
//遍历数组
public static void Bian(int[ ] args){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
例题 2
//二分查找
class ArrayDemo{
public static void main(String[] args){
int[] arr=new int[100];
for(int i=0;i<arr.length;i++){
arr[i]=i;
}
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
int key=100-1;
while(arr[mid]!=key){
if(arr[mid]>key){
max=mid-1;
}
if(arr[mid]<key){
min=mid+1;
}
mid=(min+max)/2;
if(min>max){
mid=-1;
break;
}
}
System.out.println(mid);
例题 3
import java.util.Arrays;//数组工具类
class SortDemo{
public static void main(String[] args){
//选择排序
selectSort();
//冒泡排序
bubbleSort();
//插入排序
insertSort();
}
public static void insertSort(){
int[] arr=new int[10000];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*5);
}
long start=System.currentTimeMillis();
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j;
for(j=i;j>0&&arr[j-1]>e;j--){
arr[j]=arr[j-1];
}
arr[j]=e;
}
long end=System.currentTimeMillis();
System.out.println("插入排序time="+(end-start));
}
public static void bubbleSort(){
int[] arr=new int[10000];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*5);
}
long start=System.currentTimeMillis();
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
long end=System.currentTimeMillis();
System.out.println("冒泡排序time="+(end-start));
}
public static void selectSort(){
int[] arr=new int[10000];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*5);
}
long start=System.currentTimeMillis();
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
long end=System.currentTimeMillis();
System.out.println("选择排序time="+(end-start));
}
}
二维数组
二维数组本质上就是一堆数组;
二维数组的格式
数据类型[][]数组名 :
数据类型数组名[][]; // 允许这种方式 ,但并不推荐使用它
例题
//找出整行整列或对角线相同的并打印
import java.util.Scanner;
class Demo4_25{
public static void mian(String[] args){
Scanner scanner=new Scanner(System.in);
int size=scanner.nextInt();
int[][] m=new int[size][size];
for (int i=0;i<m.length;i++){
for (int j=0;j<m[i].length;j++){
m[i][j]=(int)(Math.random()*2);
System.out.print(m[i][j]+" ");
}
System.out.println();
}
findRow(m);
findCol(m);
//findDiagonal(m);
//findSubDiagonal(m);
}
public static void findRow(int [][] m){
for (int i=0;i<m.length;i++){
boolean flag=true;
for (int j=1;j<m[i].length;j++){
if (m[i][0]!=m[i][j]){
flag=false;
break;
}
}
if (flag){
String number=m[i][0]==0?"0":"1";
System.out.println("All"+number+"in row"+(i+1));
}
}
}
public static void findCol(int [][] m){
for (int j=0;j<m.length;j++){
boolean flag=true;
for (int i=1;i<m.length;j++){
if (m[i][0]!=m[i][j]){
flag=false;
break;
}
}
if (flag){
String number=m[0][j]==0?"0":"1";
System.out.println("All"+number+"in col"=(j+1));
}
}
}
}