java与我的第五天

数组概念

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型(后面讲解)。
数组定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组;
推荐使用第一种定义方式。

*Java中的数组必须先初始化,然后才能使用。所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

初始化的分类:

a:动态初始化: 只指定长度,由系统给出初始化值
b:静态初始化: 给出初始化值,由系统决定长度
*注意事项: 这两种方式,只能使用一种,不能进行动静结合

*动态初始化的格式:

数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
****举例: int[] arr = new int[3]; 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值

****本人对java中内存分配的理解

	{
		//栈:局部变量  方法代码片段执行的时候。会给该方法分配内存空间,在栈内存中压栈
public class MethodTest01{
     public static void main(String[] args){
           int a=10;
           int b=20;
           int retValue = sumInt(a,b);
           System.out.println("retValue="+retValue);
}
    public static int sumInt(int i, int j){
   int result = i+j;
   int num =3;
   int retValue =divide(result,num);
   renturn retValue;
}
public static int divide(int x,int y){
int z =x/y;
renturn z;
}
}
}

栈内存数据流程

堆: 存放的是所有new出来的东西

特点:
a: 每一个new出来的东西都会为其分配一个地制值。
b: 每一个变量都有一个默认的值
byte,short,int,long – 0
float,double – 0.0
char – ‘\u0000’
boolean – false
引用数据类型 – null
c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收
方法区
***静态初始化的格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例: int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
举例: int[] arr = {1,2,3};

**二维数组其实就是每一个元素为一维数组的数组。
二维数组格式1
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组 必须写上
n表示每一个一维数组的元素个数 可选
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,##名称是arr[0],arr[1],arr[2]##
每个一维数组有2个元素,###可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素###
注意事项
以下格式也可以表示二维数组
a:数据类型 数组名[][] = new 数据类型[m][n]; int arr[][]=new int[m][n]
b:数据类型[] 数组名[] = new 数据类型[m][n];
这两种格式不推荐使用
注意下面定义的区别
int x,y;
int[] x,y[];

区别是:
int[] x,y[];//定义了两个数组 一个是一维数组x 一个是二维数组y
x=new int[3];
y=new int[3][];

二维数组格式2
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];

二维数组格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}…};
简化版:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
这个格式属于静态初始化:由我们指定具体的元素值,由系统给分配长度
举例:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};

需求:打印杨辉三角形(行数可以键盘录入)
	1
	1 1	
	1 2 1
	1 3 3 1
	1 4 6 4 1 
	1 5 10 10 5 1

分析:看这种图像的规律
A:任何一行的第一列和最后一列都是1
B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

步骤:
A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。
这个n的数据来自于键盘录入。
B:给这个二维数组任何一行的第一列和最后一列赋值为1
C:按照规律给其他元素赋值
从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
D:遍历这个二维数组。

import java.util.Scanner;
class yanghui 
{
	public static void main(String[] args) 
	{
		Scanner sc=new Scanner(System.in);
		int n = sc.nextInt();
		int [][] arr= new int [n][n];
		for (int z=0;z<n ;z++)
		{
			arr[z][0]=1;
			arr[z][z]=1;
		}

		for (int i=2;i<n;i++)
			{
				for (int j=1;j<i ;j++ )
				{
					arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
				}
			}
        for (int x=0;x<n ;x++ )
        {
			for (int y=0;y<=x ;y++ )
			{
				System.out.print(arr[x][y]);
				if (x==y)
             {
					System.out.println();
             }
			}           
        }
	}
}

递归概述: 方法定义中调用方法本身的现象
B递归注意事项
要有出口,否则就是死递归
次数不能太多,否则就内存溢出

import java.util.Scanner;	
class DiGui 
{
	public static void main(String[] args) 
	{
		Scanner sc=new Scanner(System.in);
		int x = sc.nextInt();
	    int r = sum(x);

		System.out.println(r);
	}
	public static int sum(int x){
	     if (x==1)
	     {
			 return 1;
	     }
		 return x+sum(x-1);      //retrun x*sum(x-1)  阶乘
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值