数组
一。一维数组的声明和初始化
声明方式:
String[] names;
int age[];
静态初始化:初始化和赋值同时进行
names = new String[]{"aa","cc"};
//下面的声明和初始化不能分开进行
String[] ps = {"aa","cc"};
动态初始化:初始化和赋值分开进行
String[] ps = new String[3]; //3指的是数组的长度
注意:无论是静态初始化还是动态初始化数组一旦创建成功长度不可变。
二. 调用数组中的元素 : 通过索引值调用数组中的元素。索引值(下角标)是从0开始到(数组的长度-1)
int[] numbers = {1,2,3,4,5};
取值:
int n = numbers[0];
赋值:
numbers[0] = 100;
三. 数组的属性 – length(数组的长度)
String[] persons = {“小苍”,“小波”,“小饭”};
int len = persons.length;
四. 数组的遍历 : 根据数组的索引值进行遍历
String[] persons = {“小苍”,“小波”,“小饭”};
for(int i = 0; i < persons.length; i++){
System.out.println(persons[i]);
}
五. 数组元素的默认值
byte short int long -> 0
float double -> 0.0
char -> \u0000
boolean -> false
引用数据类型(数组,接口,类) -> null
案例1:
package com.atguigu.java;
/**
数组 :相同数据类型的组合
说明:
1.数组是引用数据类型
2.数组中的元素可以是基本数据类型也可以是引用数据类型。
*/
public class ArrayTest {
public static void main(String[] args) {
//1.数组的声明和初始化
String[] names; //建议使用第一种声明类型
int age[];
//初始化
//①静态初始化 :初始化和赋值同时进行
names = new String[]{"小泽老师","小苍老师","小波老师","小泷老师"};
//下面的方式:声明和初始化不能分开写
int[] score = {1,20,100,90};
//②动态初始化 :初始化和赋值分开进行(先不放数据)
age = new int[5]; //5指的是数组的长度(可以放几个元素)
//2.获取数组中的元素:通过使用数组的下角标(索引值)来获取
//下角标(索引值)是从0开始的到数组的长度 - 1
//获取数组中的数据:
String name = names[1]; //用name承接取出来的值
System.out.println(name);
//给数组中的元素赋值
age[0] = 1000;
System.out.println(age[0]);
//3.数组的属性 :length - 数组的长度
int len = age.length;
System.out.println(len);
System.out.println(names.length);
//4.遍历数组中的所有元素
for(int i = 0; i < names.length; i++){//0 ~ 3
System.out.println(names[i]);
}
System.out.println("---------------------------------------");
//5.数组元素的默认值
/*
* byte,short,int,long -> 0
*
* float,double -> 0.0
*
* char -> \u0000
*
* boolean -> false
*
*
* 引用数据类型 :null
*
*/
byte[] b = new byte[2];
System.out.println(b[0]);
System.out.println(age[2]);
boolean[] bs = new boolean[2];
System.out.println(bs[0]);
char[] cs = new char[2];
System.out.println("ddd"+ cs[0] + "acc");
String[] str = new String[2];
System.out.println(str[0]);
}
}
案例2:一维数组的内存解析
package com.atguigu.java;
/**
* 一维数组的内存解析
*/
public class ArrayTest2 {
public static void main(String[] args) {
String[] names = new String[3];
names[0] = "吴京";
names[2] = "章子怡";
String[] names2 = names;
names2[1] = "志玲";
names2 = new String[3];
for(int i = 0; i < names.length; i++){
System.out.println(names[i]);
}
System.out.println("-------------names2----------------");
for(int i = 0; i < names2.length; i++){
System.out.println(names2[i]);
}
}
}
练习1:
package com.atguigu.exer;
/**
需求:创建一个char类型的26个元素的数组,分别 放置'A'-'Z‘。
使用for循环访问所有元素并打印出来。
提示:char类型数据运算 'A'+1 -> 'B','0'+1 -> ‘1‘
*/
public class ExerTest1 {
public static void main(String[] args) {
//创建一个数组
char[] cs = new char[26];
char c = 'A';
//使用循环赋值
for (int i = 0; i < cs.length; i++) {
cs[i] = c;
c += 1;
}
//遍历数组中的内容,输出
for (int i = 0; i < cs.length; i++) {
System.out.println(cs[i]);
}
}
}
练习2:
package com.atguigu.exer;
/*
* 创建一个char类型的36个元素的数组,前26个元素放置'A'-'Z‘,后10个元素放置'0'-'9‘。
*/
public class ExerTest2 {
public static void main(String[] args) {
//思路和步骤如下:
//1.创建数组
char[] cs = new char[36];
char c = 'A';
char number = '0';
//2.给数组赋值
for (int i = 0; i < cs.length; i++) {
if(i < 26){
cs[i] = c;
c += 1;
}else{
cs[i] = number;
number += 1;
}
}
//3.遍历数组,打印
for (int i = 0; i < cs.length; i++) {
System.out.println(cs[i]);
}
}
}
案例3:
package com.atguigu.exer;
import java.util.Scanner;
/*
* 输入五名同学成绩,求出总成绩和平均成绩
快捷键 :ctrl + 1
*/
public class ExerTest3 {
public static void main(String[] args) {
//创建数组用来存储成绩
int[] scores = new int[5];
//创建Scanner的对象用来读取键盘输入的数据
Scanner scanner = new Scanner(System.in);
//存储学生成绩
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入学生的成绩");
int score = scanner.nextInt();
//把成绩放入到数组中
scores[i] = score;
}
//输出学生的总成绩和平均成绩
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
System.out.println("总成绩:" + sum + " 平均成绩:" + sum / scores.length);
}
}
案例4:
package com.atguigu.exer;
/*
* 小明要去买一部手机,他询问了4家店的价格,分别是2800.5元,2900元,2750.0元和3100元,显示输出最低价
*/
public class ExerTest4 {
public static void main(String[] args) {
//存储所有人的价格
double[] price = {2800.5,2900,2750.0,3100};
double minPrice = price[0];//用来记录最低价格
//循环遍历,寻找最小价格
for (int i = 0; i < price.length; i++) {
//取出数组中的每一个值
double p = price[i];
//比较价格
if(minPrice > p){
//记录比较后的低的价格
minPrice = p;
}
}
System.out.println("最低价格为 : " + minPrice);
}
}
案例5:
package com.atguigu.exer;
import java.util.Scanner;
/*
* 输入10个元素(10——99范围),保存到数组中,查找里面是否有>80,如果有,显示有,否则提示没有
*/
public class ExerTest5 {
public static void main(String[] args) {
//1.创建一个数组长度为10
int[] numbers = new int[5];
//2.读取数据 - 并将数据存放到数组中
Scanner sc = new Scanner(System.in);
for(int i = 0; i < numbers.length; i++){
System.out.println("请输入一个数");
/*
int number = sc.nextInt();
numbers[i] = number;
*/
numbers[i] = sc.nextInt();
}
//3.遍历数组-查找大于80的数据,如果有如果有,显示有,否则提示没有
boolean boo = false; //true表示有大于80的,false则表示没有
for (int i = 0; i < numbers.length; i++) {
int num = numbers[i];
if(num > 80){
boo = true;
break;
}
}
//只要判断boo的值就可以推断出来是否有
if(boo){
System.out.println("有");
}else{
System.out.println("没有");
}
}
}
案例6:
package com.atguigu.exer;
import java.util.Scanner;
/*
* 随机产生10个元素(10——99范围),保存到数组中,查找里面是否有>80,如果有,显示有,否则提示没有
*/
public class ExerTest6 {
public static void main(String[] args) {
/*
//random()产生一个随机数 ,数值范围[0.0,1.0)
for (int i = 0; i < 50; i++) {
System.out.println((int)(Math.random() * 90) + 10);
}
*/
//1.创建一个数组长度为10
int[] numbers = new int[5];
for(int i = 0; i < numbers.length; i++){
System.out.println("请输入一个数");
numbers[i] = (int)(Math.random() * 90 + 10);
}
//3.遍历数组-查找大于80的数据,如果有如果有,显示有,否则提示没有
boolean boo = false; //true表示有大于80的,false则表示没有
for (int i = 0; i < numbers.length; i++) {
int num = numbers[i];
if(num > 80){
boo = true;
break;
}
}
//只要判断boo的值就可以推断出来是否有
if(boo){
System.out.println("有");
}else{
System.out.println("没有");
}
}
}
3.常见算法
package com.atguigu.java2;
import java.util.Arrays;
/*
数组中常见的算法:
2. 求数值型数组中元素的最大值、最小值、平均数、总和等
3. 数组的复制、反转、查找(线性查找、二分法查找(了解))
4. 数组元素的排序算法
*/
public class ArrayAriTest {
public static void main(String[] args) {
int[] numbers = {10,20,6,5,3};
//求数值型数组中元素的最大值
int maxNumber = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if(maxNumber < numbers[i]){
maxNumber = numbers[i];
}
}
System.out.println("最大值:" + maxNumber);
//求数值型数组中元素的最小值
int minNumber = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if(minNumber > numbers[i]){
minNumber = numbers[i];
}
}
System.out.println("最小值:" + minNumber);
//求数值型数组中元素的和 ,平均数
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("sum=" + sum + " 平均数:" + sum/numbers.length);
//数组的复制
int[] copyNumbers = new int[numbers.length];
for (int i = 0; i < copyNumbers.length; i++) {
copyNumbers[i] = numbers[i];
}
//输出数组中的元素
copyNumbers[0] = 100;
//思考 :如果修改了copyNumbers中的数据,numbers中的数据发生变化没? 没有
String str = Arrays.toString(numbers);//Arrays是操作数组的一个工具类
System.out.println("numbers=" + str);
System.out.println("copyNumbers=" + Arrays.toString(copyNumbers));
}
}
package com.atguigu.java2;
import java.util.Arrays;
/*
数组的反转、查找(线性查找、二分法查找(了解))
*/
public class ArrayAriTest2 {
public static void main(String[] args) {
int[] numbers = {10,20,6,5,3};
//数组的反转 - 创建一个新的数组(倒序查找原来的数组,正序存放数组中的元素)
int[] reverseNumbers = new int[numbers.length];
//倒着遍历numbers
for(int i = numbers.length - 1; i >=0; i--){
reverseNumbers[numbers.length - 1 - i] = numbers[i];
}
//输出数组中的元素
// System.out.println(Arrays.toString(reverseNumbers));
System.out.println("---------------------------------------------------");
//第二种方式
for(int i = 0,j = numbers.length - 1; i < numbers.length / 2; i++,j--){
//数据交换
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
System.out.println(Arrays.toString(numbers));
}
}
package com.atguigu.java2;
import java.util.Arrays;
/*
数组的反转、查找(线性查找、二分法查找(了解))
*/
public class ArrayAriTest2 {
public static void main(String[] args) {
int[] numbers = {10,20,6,5,3};
//数组的反转 - 创建一个新的数组(倒序查找原来的数组,正序存放数组中的元素)
int[] reverseNumbers = new int[numbers.length];
//倒着遍历numbers
for(int i = numbers.length - 1; i >=0; i--){
reverseNumbers[numbers.length - 1 - i] = numbers[i];
}
//输出数组中的元素
// System.out.println(Arrays.toString(reverseNumbers));
System.out.println("---------------------------------------------------");
//第二种方式
for(int i = 0,j = numbers.length - 1; i < numbers.length / 2; i++,j--){
//数据交换
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
System.out.println(Arrays.toString(numbers));
}
}
package com.atguigu.java2;
/*
* 查找(线性查找、二分法查找(了解))
*/
public class ArrayAriTest3 {
public static void main(String[] args) {
int[] numbers = {10,20,6,5,3};
//线性查找
int findNumber = 20;//要查找的内容
int index = -1;//用来记录查找到的数值的索引位置
for (int i = 0; i < numbers.length; i++) {
if(findNumber == numbers[i]){
//如果查找到,记录下该索引的位置
index = i;
break;
}
}
//判断是否查找到了
if(index == -1){
System.out.println("亲!!没有找到您想要的内容哦");
}else{
System.out.println("您的数据在" + index + "索引位置");
}
}
}
package com.atguigu.java2;
import java.util.Arrays;
/*
* 有时间就看一下,没时间就算了 (了解)
*/
public class BinarySearch {
public static void main(String[] args) {
int[] number = { 12, 30, -5, 6, 9, 10, 5 };
//排序
Arrays.sort(number); // 必须排序好
System.out.println(Arrays.toString(number));
int findNumber = 12; // 要查找的内容
int start = 0; //起始位置
int end = number.length - 1; //结束的位置
int index = -1; // 所在的元素位置
while (start <= end) {
int mid = (start + end) / 2;
if (number[mid] == findNumber) {
index = mid;
break;
} else if (number[mid] < findNumber) {
start = mid + 1;
} else {
end = mid - 1;
}
}
if (index == -1) {
System.out.println("没有找到您需要的内容");
} else {
System.out.println("元素所在的位置" + index);
}
}
}
package com.atguigu.java2;
import java.util.Arrays;
/*
* 有时间就看一下,没时间就算了 (了解)
*/
public class BinarySearch {
public static void main(String[] args) {
int[] number = { 12, 30, -5, 6, 9, 10, 5 };
//排序
Arrays.sort(number); // 必须排序好
System.out.println(Arrays.toString(number));
int findNumber = 12; // 要查找的内容
int start = 0; //起始位置
int end = number.length - 1; //结束的位置
int index = -1; // 所在的元素位置
while (start <= end) {
int mid = (start + end) / 2;
if (number[mid] == findNumber) {
index = mid;
break;
} else if (number[mid] < findNumber) {
start = mid + 1;
} else {
end = mid - 1;
}
}
if (index == -1) {
System.out.println("没有找到您需要的内容");
} else {
System.out.println("元素所在的位置" + index);
}
}
}
package com.atguigu.java2;
import java.util.Arrays;
/**
冒泡排序
*/
public class BubbleSortTest {
public static void main(String[] args) {
int[] numbers = {10,20,6,5,3};
//控制几轮 {0,1,2,3,4}
for (int i = 0; i < numbers.length - 1; i++) {
//控制每轮比较的次数 {第一轮的j的值 :0,1,2,3 }
for (int j = 0; j < numbers.length - 1 - i; j++) {
//判断是否需要交换
if(numbers[j] > numbers[j + 1]){
//数据交换
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
//输出数组中的数据
System.out.println(Arrays.toString(numbers));
}
}