Day4 JAVA复习

七、数组

具有相同数据类型,按照一定顺序组合而成的一个数据类型
特点:数据类型相同;有序;下标

1.一维数组

具有相同数据类型,按照一定顺序组合而成的一个数据类型

1.1定义

数据类型 变量名
int[] arr;
int arr[];

1.2创建(分配内存)

arr=new int[10];

1.3赋值

int[] array={1,2,3,4,5};//不能拆开
int[] a=new int[3];
a={3,4,5};//错的

1.4使用数组数据

使用数组数据
1.System.out.println(arr[0]);
2. for(int i = 0;i<a.length;i++){
System.out.println(arr[i]);}
3. for(int i:arr){
System.out.println(i);
}
4.String str = Arrays.toString(arr);

1.5数组复制

//arraycopy方法
public static void test1(){
	int[] a = {1,2,3,4,5,6};
	int[] b = new int[10];//{1,2,3,0,.....}
	//arg1:表示原数组
	//arg2:表示从哪个下标开始拷贝
	//arg3:表示目标数组
	//arg4:表示目标数组的位置
	//arg5:拷贝的长度
	System.arraycopy(a, 0, b, 0, 3);
	System.out.println(Arrays.toString(b));
}
//数组的扩容,重新创建一个新的数组
public static void test2(){
	int[] a = {1,2,3,4};//5
	//arg1:元数组
	//arg2:长度
	a = Arrays.copyOf(a, a.length+1);//新的
	a[a.length-1] = 5;
	System.out.println(Arrays.toString(a));
}

1.6排序

1.选择排序

//arraycopy方法
public class Demo7 {
		//选择排序,选一个数,和后面所有数比较,找最大的。
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int c;
		int[] a={1,32,65,85,45,12,15,65,75,19,34,49,62,32,22,15,16};
		for(int i=0;i<a.length-1;i++){
			for(int j=i+1;j<a.length;j++){
				if(a[i]<a[j]){
					c=a[i];
					a[i]=a[j];
					a[j]=c;
				}
			}
		}
System.out.println(Arrays.toString(a));
	}
}

2.冒泡排序

//arraycopy方法
public class Demo6 {
//冒泡排序:相邻的两个数比较,大的沉下去,笑的浮起来
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//{23,44,6,22}
		int b;
		int[] a={11,5,64,94,32,68,21,4,2,9};
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a.length-i-1;j++){
				if(j==a.length-i-1)
					continue;
				if(a[j]>a[j+1]){
					b=a[j+1];
					a[j+1]=a[j];
					a[j]=b;
				}
			}
		}
		System.out.println(Arrays.toString(a));
	}
}

1.7练习

输出99 乘法表
public static void test3() {
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				System.out.print(j+"*"+i+"="+i*j);
				System.out.print("   ");
			}
			System.out.println("");
		}

	}
“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100 文
钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
public class Demo14 {
	public static void main(String[] args) {
		int a=9;
		int b=6;
		int c=1;
		
		for(int d=1;d<=100;d++){
			for(int e=1;e<=100;e++){
				for(int f=1;f<=100;f++){
					if((d+f+e)==100&&(a*d+b*e+c*f)==300){
						System.out.println("公鸡有"+d+"只,母鸡有"+e+"只,小鸡有"+f+"只");
					}
				}
			}
		}		
	}
}
搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完
public class Demo8 {
	public static void main(String[] args){
	   for(int x=0;x<9;x++){
		   for(int y=0;y<12;y++){
			   for(int z=0;z<72;z++){
				   if(((8*x)+(6*y)+(z))==72&&(x+y+z)==36)
					   System.out.println(x+","+y+","+z);
			   }
		   }
	   }
	   }
	}

 读入一个整数n,输出如下图形:
当输入 n=3时,输出:
	    *
       ***
      *****
当输入n=4时,输出:
     	*
       ***
      *****
     *******
public class Demo10 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.println("输入金字塔层数");
		int x=sc.nextInt();
		for(int a=1;a<=x;a++){
			for(int b=0;b<=9-a;b++){
				System.out.print(" ");
			}
			for(int c=1;c<=2*a-1;c++){		
					System.out.print("*");			
			}			
		System.out.println("");			
		}
	}
}
 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3 + b3 + c3 = abc,则abc是水仙花数。
public class Demo9 {
	public static void main(String[] args) {
		for(int x=100;x<1000;x++){
			int a=x/100;     
			int b=(x%100)/10;
			int c=x%10;
			
			if(a*a*a+b*b*b+c*c*c==x)
				System.out.println(x);
		}		
	}
}

2.二维数组

2.1定义

int[][] a;
int a[][];
int[] a[];

2.2创建

与一维数组创建方法一致
		//int[][] a={{1,2,3},{4,5,6},{7,8,9}};
		//int[][] a1=new int[][]{{1,2,3},{4,5,6}};
		int[][] a;
		a=new int[2][3];
		a[0][0]=1;
		a[1][0]=1;
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}
		
1	0	0	
1	0	0
			a=new int[2][];
	//	a[0]=new int[1];//第一行一个
	//	a[1]=new int[3];//第二行三个
		a[0][0]=1;//运行时异常,空指针异常,该数组元素没有初始化
		System.out.println(a);//a的地址
		System.out.println(a[0]);//a[0]的地址
		System.out.println(Arrays.toString(a[0]));//a[0]的元素

2.3输出

二维数组的输出必须靠Arrays.toString();
依靠for循环,将数组一行一行或一个一个输出

	for(int i=0;i<a1.length;i++){
			System.out.println(Arrays.toString(a[i]));
		}

2.4练习

		public class Demo2 {
	//求二维数组对角线
	public static void main(String[] args) {
		int x=0;
		int a[][]=new int[][]{{1,2,3},{1,2,3},{1,2,3}};
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				if(i==j){
					x+=a[i][j];
				}
			}
		}
		System.out.println(x);
	}

}
	public class Demo3 {
	//数组的转置
	//123
	//456
	
	//14
	//25
	//36

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] a=new int[][]{{1,2,3},{4,5,6}};
		int[][] a1=new int[3][2];
		
		for(int x=0;x<=a.length-1;x++){
			for(int y=0;y<=a[x].length-1;y++){
				a1[y][x]=a[x][y];
			}
			}
		for(int i=0;i<a1.length;i++){
			System.out.println(Arrays.toString(a[i]));
		}
		}
	}


	public class Demo4 {
	//杨辉三角
	/**
	 * 1
	 * 1 1
	 * 1 2 1
	 * 1 3 3 1
	 * 1 4 6 4 1
	 * @param args
	 */
	public static void main(String[] args) {
		int[][] a=new int[5][];
		for(int i=0;i<a.length;i++){
			a[i]=new int[i+1];
			for(int j=0;j<a[i].length;j++){
				if(j==0||i==j){
					a[i][j]=1;
				}else{
					a[i][j]=a[i-1][j]+a[i-1][j-1];
				}
			}
		}
		for(int x=0;x<a.length;x++){
			System.out.println(Arrays.toString(a[x]));
		}
	}
}

八、方法

1.方法的定义模式

  • 访问修饰符 方法的返回值类型 方法名称(形参列表){
    方法体;
    }
  • private、defailt、protect、public
  • 方法的返回值类型:
              无返回值类型:void 可以有return语句
              有返回值类型:int、int[]、Student、object,必须有return兼容的值
  • 方法名称:见名知其意:合法的标识符定义
  • 形参列表:可有可无,定义格式和变量的定义格式相同

2.使用方法(方法的调用)

  • 实参列表的参数传递:
  • 基本数据类型:传值
  • 引用类型:传地址值
public class Demo6 {
   
   public static void test1(int i){
   	i=9;
   	System.out.println(i);
   }
   public static void test2(int[] a){
   	a[1]=50;
   	a=new int[3];//创建了新的空间,不会影响main中的a
   	//new之后没有给a[1]赋值,所以a[1]是0
   	a[2]=10;
   	System.out.println(a[2]);
   	System.out.println(a[1]);
   }
   public static void main(String[] args) {
   	// TODO Auto-generated method stub
   	int i=10;
   	test1(i);
   	System.out.println(i);//值传递不会影响main中i的值
   	int[] a=new int[3];
   	a[1]=40;
   	a[2]=100;
   	test2(a);
   	System.out.println(a[2]);//main中的a[2],地址没有改变,地址对应的是100
   	System.out.println(a[1]);//main中的地址和test中a[1]地址相同,test2(a)之后值改变,a[1]是50
   }
9
10
10
0
100
50

3.方法的重载

在一个类中或者继承关系中,方法名相同,参数列表不相同,参数类型不同,形参个数不同
注:方法的重载和方法的返回类型无关

public class Demo7 {
	 //方法重载
	 public static int sum(int x,int y){
		return x+y;
	}
	 //public static void sum(int x,int y) //error
	public static int sum(int x){
		return x;
	}
	public static int sum(int x,float y){
		return (int) (x+y);
	}
	public static int sum(float x,int y){
		return (int) (x+y);
	}
	public static float sum(float x,float y){
		return x+y;
	}


	/**
    * 方法完成的功能是单一的
    * @param args
    */
    
   public static double mult(int x,int y){
   	return x*y;
   }
   public static float mult1(int x,float y){
   	return x*y;
   }
   public static void main(String[] args) {
   	// TODO Auto-generated method stub
   	
   	System.out.println(mult(2,3));//和形参的数据类型不匹配时,会自动转换到对应的数据类型
   	//System.out.println(mult(2,3.0));但不能高于形参的数据类型

   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值