JAVA中的数组

数组

为什么使用数组:

如果储存的数据较多,一个个设置变量太麻烦,java针对此问题提供了有效的储存方式——数组

Java中的数组

在java中数组就是一个变量,用于将相同的数据类型的数据储存在内存中。数组中的每一个数据元素都属于同一数据类型。

数组的基本要素

  • 标识符:数组和变量一样也需要一个名字,称为标识符,这用于区分不同的数组

  • 数组元素:当数组有了标识符后要向数组中储存数据,这些数据就是数组的元素

  • 数组下标:在数组中,为了正确的获得数组的元素,需要对他们经行编号,这样就能根据编号去存取数据,这个编号就是数组下标

  • 元素类型:储存在数组中的数组元素应该是同一数据类型,就是存储在数组中的数据是相同数据,用于声明数组的时候确定数组每个元素数据类型

概念

  1. 数组变量可以储存多个值

  2. 数组的数据类型保持一致

  3. 数组存放的每一个值都有下标(从零开始排序)

  4. 数组有固定的长度,表示存放的数值的个数

数组的使用

声明

/*//声明数组
数据类型[] 数组名;
//或者
数据类型 数组名[]
    
//分配空间
数组的变量名 = new 数据类型[长度]
    
//赋值
数组名[长度] = 数据;
数据类型[] 数组名 = {数据}*/

package arr;

public class TestArr01 {

	public static void main(String[] args) {
		//	数组的声明
		//1.字符串数组:存放姓名
		//2.整数数组:存放积分
		//3.小数数组:存放小数
		
		//String[] names;		//		声明
		//names = new String[3];		//		分配空间
		
		String[] name = new String[3];		//		声明加分配空间
		int[] score = new int[5];		//		int数组
		double[] score2 = new double[2];		//doube类型
		
		//数组存放的数据(赋值)
		name[0] = "张三";			//	把数值存放到下标0,(表示第一个值)
		name[1] = "李四";			//下标1的位置(表示第二个值)
		//		第三个值默认是空值:null表示
		
		//		打印
		System.out.println("names的第一个值:"+name[0]);
		System.out.println("names的第二个值:"+name[1]);
		System.out.println("names的第三个值:"+name[2]); //		null默认值
		
		
		//整数的赋值和打印
		score[0] = 1000;
		score[1] = 2000;
		System.out.println("score的第一个值:" + score[0]);
		System.out.println("score的第二个值:" + score[1]);
		System.out.println("score的第三个值:" + score[2]);
		System.out.println("score的第四个值:" + score[3]);//		0默认值
		System.out.println("score的第五个值:" + score[4]);
		
		//小数数组的赋值和打印
		score2[0] = 1.23;
		System.out.println("score2的第一个值:" + score2[0]);
		System.out.println("score2的第二个值:" + score2[1]);//	0.0默认值
	}

}

循环输出数组

package arr;

import java.util.Scanner;

public class TestArr02 {

	public static void main(String[] args) {
		// 另外两种数组赋值的方法:
		//1.分配数组空间的同时完成赋值
		//2.循环输入赋值输出数组
		
		//String[] names = new String[3];		分配空间可以存放3个文本的数组
		String[] names = {"张三","李四"};		//分配空间同时完成赋值,数组长度由数据的个数来决定
		System.out.println("有" + names.length + "人");
		System.out.println("------------------------------------------------------------");
		
		
		Scanner input = new Scanner(System.in);		//创建扫描器
		int[] score = new int[3];		//分配数组的空间(3个整数)
		
		//循环(for推荐)
		for (int i = 0; i < score.length; i++) {		//循环范围
			score[i] = input.nextInt();
		}
		
		//循环打印(按下标从0开始逐个打印)
		for (int i = 0; i < score.length; i++) {
			System.out.println("第" + (i+1) + "个:" + score[i]);
		}
		
		//数组的长度:表示可以存放数据的个数
		//length表示长度的值
		System.out.println("共" + score.length + "条数据");
		input.close();
	}

}

使用数组求平均值和总分

package arr;

import java.util.Scanner;

public class TestArr03 {

	public static void main(String[] args) {
		// 计算数组的平均分和总分
		//准备数组:使用一次性分配和赋值的数组
		double[] score = new double[5];
		Scanner input = new Scanner(System.in);		//创建扫描器
		
		double sum = 0;		//创建总分变量
		
		for (int i = 0; i < score.length; i++) {		//循环输出每次成绩并给栈赋值
			System.out.println("请输入第" + (i+1) + "成绩:");		//提示输入成绩
			score[i] = input.nextDouble();		//把输入内容保存到栈中
			sum += score[i];		//求出整数
		}
		
		System.out.println("总分为:"+sum);		//打印出总分
		System.out.println("平均分为:"+(sum/score.length));		//用总分除以长度求出平均值
		input.close();
	}

}

使用循环判断数组中的每个值

package arr;

import java.util.Scanner;

public class TestArr04 {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		int[] numbers = {8,4,2,1,23,344,12};
		int sum = 0;
		boolean ok = false;
		
		System.out.println("请猜幸运数:");
		int inNumbers = input.nextInt();
		
		for (int i = 0; i < numbers.length; i++) {
			System.out.println("他们的值为:" + numbers[i]);
			sum += numbers[i];
			
			if (inNumbers == numbers[i]) {
				System.out.println("\n对了!奖励一个亿\n");
				ok = true;
			}	
		}
		if (ok == false) {
			System.out.println("猜错了,罚款一亿");
		}
		
		System.out.println("\n幸运数的和为"+sum);
		
		input.close();
		
	}

}

Arrays工具包给数组排序

package arr;

import java.util.Arrays;

public class TestArr05 {

	public static void main(String[] args) {
		//数组的字母排序
		
		//分配数组空间
		int[] score = {90,80,70,60,50};
		//执行自动排序:Arrays是jdk的工具类,sort是排序方法,可以将数组排序
		Arrays.sort(score);
		for (int i = 0; i < score.length; i++) {
			//打印效果和赋值顺序不同,sort排序了
			System.out.println(score[i]);
		}
	}

}

循环输入数值,输出最大值

package arr;

import java.util.Scanner;

public class TestArr06 {

	public static void main(String[] args) {
		//找出数组的最大值
		//步骤:
		//1.准备一个整数数组
		//2.假设数组的第一个值是最大值
		//3.循环数组,将每个值与最大值比较,得出最终的最大值
		Scanner input = new Scanner(System.in);
		int[] num = new int[5];
		int max = 0;
		for (int i = 0; i < num.length; i++) {
			System.out.println("请输入" + (i+1) + "个值:");
			num[i] = input.nextInt();
			if (num[i] > max) {
				max = num[i];
			}
		}
		System.out.println("最大值为:"+max);
		input.close();
	}

}

通过默认值执行继续输入系统

package arr;

import java.util.Scanner;

public class TestArr07 {

	public static void main(String[] args) {
		//动态数据
		//在现有数据的后面接着输入
		
		Scanner input = new Scanner(System.in);
		int[] score = new int[5];//设有5个数值
		score[0] = 98;		//已经存在的数字有两个
		score[1] = 79;
		
		//通过循环判断找出继续输入的位置
		//	原理:int数组没有值,用0作为默认值
		for (int i = 0; i < score.length; i++) {
			//按下表顺序一次判断,数组值是否是01,如果是0,表示当前下表还没有输入值
			if(score[i] == 0) {
				System.out.println("请输入数据:");
				score[i] = input.nextInt();
			}else {
				System.out.println("数据:"+score[i]);
			}
		}
		input.close();
	}

}

双重for循环

外循环执行一次,内循环执行多次

格式

for(int i = 0;i <= 10;i++){
    //循环操作1
    for(int j = 0;j < 5; i++){
        //循环操作2
    }
}

效果

package loop;

public class Test01 {

	public static void main(String[] args) {
		//双循环的原理(for为例)
		/*
		 * 结构:
		 * for(循环条件1){
		 * 
		 * 			for(循环条件2){
		 * 
		 * 			}
		 * }
		 */
		
		//外层循环:1 ~ 5
		for (int i = 1; i <= 5; i++) {
			System.out.println("i:"+i);
				//内层循环:1 ~ 3
				for (int j = 1; j <= 3; j++) {
					System.out.println("\tj:"+j);
				}
		}
	}

}

双重for循环打印九九乘法表

package loop;

public class Test02 {

	public static void main(String[] args) {
		// 九九乘法表(左下角的直角三角形)
		
		//外循环:1 ~ 9的数字
		//i和j相通结束内循环
		for (int i = 1; i <= 9; i++) {
			//内循环:控制第二个数字
			for (int j = 1; j <= i; j++) {
				System.out.print(i + "*" + j + "=" + (j*i) + "\t");
			}
			//换行
			System.out.println("");
		}
	}

}

打印倒直角三角形

package loop;

public class Test03 {

	public static void main(String[] args) {
		//乘法表(左上角的倒三角)
		
		//外循环:控制打印9行
		for (int i = 9; i >= 1; i--) {
			//内循环
			//列的规则:第一行九列		第二行八列		第三行七列	....	第九行一列
			for (int j = 1; j <= i; j++) {
			System.out.print(i + "*" + j + "\t");
			}
			System.out.println();
		}
	}

}

测算不同班级中不同的班级平均分

package ex;

import java.util.Scanner;

public class Test01 {

	public static void main(String[] args) {
		//若有三个班级各有四名学员参赛,如何计算每个班级参赛学员的平均分
		//思路:
		//1.循环3次,输入三个班级
		//2.在每个班级里面循环4次,输入每个人的成绩
		//3.为每个班级计算平均分
		Scanner sc = new Scanner(System.in);	//创建扫描器
		
		int[] score = new int[4];		//分数数组
		int sum = 0;		//总分
		
		for (int i = 1; i <= 3; i++) {
			System.out.println("请输入第" + i +"个班级的成绩");
			
				for (int j = 0; j < score.length; j++) {
					System.out.print("第" + (j+1) + "学生的成绩为:");
					score[j] = sc.nextInt();
					sum += score[j];
				}
					System.out.println("平均分为:"+(sum/4));
					sum = 0;
		}
	}

}

项目复习和实践

import java.util.Random;
import java.util.Scanner;

public class TeatGame1 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		Random rand = new Random();
	/*	
		while (true) {
			
	}
	*/
		String yn = "y";
		int password = 0;
		String user = "";
		while("y".equals(yn)) {
			System.out.println("********欢迎进入富翁系统*************");
			System.out.println("\t\t\t1.注册");
			System.out.println("\t\t\t2.登录");
			System.out.println("\t\t\t3.抽奖");
			System.out.println("***************************************");
			
			System.out.print("请选择菜单:");
			int num = input.nextInt();
			if (num == 1) {
				System.out.println("[奖客富翁系统 > 注册]");
				System.out.println("\n请填写个人注册信息");
				System.out.print("输入用户名:");
				user = input.next();
				System.out.print("输入密码:");
				password = input.nextInt();
				int card = rand.nextInt(9999);
				System.out.println("注册成功,请记住会员卡号");
				System.out.println("姓名:" + user + "\t" + "密码:" + password + "\t" + "卡号:" + card );
		}else if (num == 2) {
			System.out.println("[奖客富翁系统 > 登录]");
				for (int i = 3; i >= 1; i--) {
					System.out.print("请输入用户名:");
					String user2 = input.next();
					System.out.print("请输入密码:");
					int password2 = input.nextInt();
					if((password2 == password) && (user2.equals(user))) {
						System.out.println("登录成功!");
						break;
					}else {
						System.out.println("登陆失败,您还有" + (i-1) + "次机会");
						if (i == 0) {
							System.out.println("登录系统自动退出");
						}
					}
				}
		}else if (num == 3) {
			System.out.println("[奖客富翁系统 > 抽奖]");
		}else {
			System.out.println("菜单号输入错误!");
		}
		}
	}
}
	`

对象

现实世界中客观存在的任何事物都可以被看作对象。对象可以是有形的,如一辆汽车;也可以是无形的,如一项计划

对象的属性和方法

属性:对象的静态特征的一个数据项,该数据项的值既是属性值

方法:对象的动态特征的行为用代码表示

封装

共同的事物特征(名词化)——属性

共同的行为动作(动词化)——方法

就是把一个事物包装起来,尽可能隐藏内部细节。


类(class)

现实世界中某一类事物,用程序模拟出来

类定义了对象将会拥有的特征(属性)和行为(方法)

类是对象的类型

方法和属性属于对象,对象属于类中的一个成员

类是抽象的模板化的。

java程序中以类为基本单位

java是面向对象的语言

在类中需要描述类所具有的属性和方法

在java中要创建一个类需要使用一个class,一个类名和一对大括号;

public:公有

class:类

private:私有

如何定义类

类定义了对象将会拥有属性和方法。定义一个类的步骤

通过定义类名,得到程序最外层的框架

public class 类名{
    
}

类的属性:通过在类的主体中定义变量来描述类所具有的静态特征(属性),这些变量称为类的成员变量

//属性
访问修饰符 数据类型 属性名称;

类的方法:通过在类中定义方法来描述这类所具有的行为,这些方法称为类的成员方法。

//方法
访问修饰符 返回值类型 方法名(){  
      //方法体
}

访问修饰符限定了访问方法的范围,如public;返回值类型是方法执行后返回的结果的类型,这个类型可以是基本类型,或者是引用类型,也可以是没有返回值,此时必须使用void来描述。方法名一般使用一个有意义的名字描述方法的作用,其命名应符合标识符的命名规则

方法的分类

  • 无参无返回值(访问修饰符 void 方法名(){})

  • 无参带返回值(访问修饰符 返回值类型 方法名(){})

  • 带参无返回值(访问修饰符 void 方法名(形参){})

  • 带参带返回值(访问修饰符 返回值类型 方法名 (形参){})

创建和使用对象

类名 对象名 = new 类名();

再创建类的对象时,需要使用Java的new关键字

再java中,要引用对象的属性和方法,需要用 “ . ” 操作符。其中对象名在圆点左边,属性或方法在圆点右边。

//使用属性和方法
对象名.属性 = 属性值;		//引用对象的属性
对象名.方法;		//引用对象的方法

成员变量和局部变量

成员变量:AutoLion类的方法可以直接使用该类定义的成员变量,如果其他类的方法要访问它,必须先创建该类的对象,然后才能通过操作符 “ . ”来引用

局部变量:他的作用域仅仅在定义该变量的方法内,因此只有在这个方法中才能使用。

注意内容

  • 作用域不同。局部变量的作用域仅限于定义他的方法,在该方法外无法访问。成员变量的作用域在整个类内部都是可见的,所有的成员方法都可以使用,如果访问权限允许,还可以在类的外部使用成员变量

  • 初始值不同。对于成员变量,如果在定义中没有给他赋值,Java会给他一个默认值,基本数据类型的值为0,引用类型的值为null。但是java不会给局部变量赋初始值,因此局部变量必须要定义赋值后再使用。

  • 在同一个方法中,不允许有同名的局部变量,在不同的方法中,可以有同名的局部变量

  • 局部变量可以和成员变量同名,并且在使用的时候,局部变量具有更高的优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值