个人复习Day4
七、数组
具有相同数据类型,按照一定顺序组合而成的一个数据类型
特点:数据类型相同;有序;下标
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));但不能高于形参的数据类型
}