import java.util.Scanner;
public class ArrayTest1{
public static void main(String[] args) {
//数组定义 两种
//1, 动态初始化 int arr1[] = new int[3];
//2,静态初始化 int[] arr2 = {1,2,3,4}; 或 int arr2[] = new int[]{1,2,3,4};
//代码演示
//动态初始化
int arr1[] = new int[3];
//静态初始化
int[] arr2 = new int[]{1,2,4};
int arr3[] = {1,2,3,4};
// 打印arr2 //数组下标是从0开始
for (int i = 0 ; i<arr2.length ; i++){
System.out.println("arr2[" + i + "]=" + arr2[i]);
}
//打印arr3
for (int i = 0 ; i<arr3.length ; i++){
System.out.println("arr3[" + i + "]=" + arr3[i]);
}
//注意:如果静态初始化时,先声明后 赋值时 必须要new
int arr4[] ; //先声明
//赋值
//arr4 = new int[]{1,2,3}; //正确
//arr4 = {1,3,4}; //错误
//案例:循环输入5个成绩,保存到double数组,并输出
Scanner sc= new Scanner(System.in);
double arr5[] = new double[5]; //动态定义数组
for (int i =0; i< arr5.length ; i++ ){
System.out.println("请输入成绩:");
arr5[i] = sc.nextDouble();
}
System.out.println("==========数组情况如下======");
for (int i = 0 ; i<arr5.length ; i++){
System.out.print("arr5[" + i + "]=" + arr5[i] + "\t");
}
/*
数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0,
float 0.0,double 0.0,char \u0000,
boolean false,String null
*/
}
}
public class ArrayTest2 {
public static void main(String[] args) {
//6.5 数组使用注意事项和细节
//1) 数组是多个相同类型数据的组合,实现对这些数据的统一管理
//int arr1[] = {1,2,3,1.1}; // 错误 1.1 从double转换到int可能会有损失
double arr2[] = {1.1, 2, 3.1, 'a'}; //可以 int -》double ,char -》double 自动类型转换可以
//2.数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
char arr3[] = {'a','d','q'};
//3. 数组创建后,如果没有赋值,有默认值
// int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,
// String null
String arr4[] = new String[3];
//遍历arr4
for (int i=0; i<arr4.length ; i++ ){
System.out.print("arr4[" + i + "]=" + arr4[i] + "\t"); //都是 null
}
//4.使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
//5.数组的下标是从0开始的
//6.数组下标必须在指定范围内使用,否则报:下标越界异常
int arr5[] = new int[3];
System.out.println(arr5[0]); //0
System.out.println(arr5[2]); //0
//System.out.println(arr5[3]); //java.lang.ArrayIndexOutOfBoundsException
//数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量
int arr6[] = new int[4];
int arr7[] = arr6;
int arr8[] = arr7;
arr8[1] = 123;
System.out.println(arr6[1]); //123
System.out.println(arr7[1]); //123
System.out.println(arr8[1]); //123
//1) 创建一个char类型的26个元素的数组,分别 放置'A'-'Z‘。
//使用for循环访问所有元素并打印出来。提示:char类型数据运算 'A'+1 -> 'B','0'+1 -> '1‘
//定义char 类型的数组
char arr9[] = new char[26];
//赋值
for (int i = 0; i<arr9.length; i++ ){
arr9[i] = (char)('A' + i);
}
//打印
for (int j=0; j<arr9.length ; j++ ){
System.out.print("arr9[" + j + "]=" + arr9[j] + "\t");
}
//案例2:2) 请求出一个数组的最大值,并得到对应的下标。
// 思路:
//1.定义数组,
//2. 定义第一元素为最大值 max=4,用变量接收下标 maxindex = 0
//3. 让max 与后面的元素进行比较,后面的元素大 max = 元素大的;
//4.遍历数组元素与其一个一个比较。最后输出max和maxindex
int arra[] = {4, 9, -3, 100, 34, 90, 1};
int max = arra[0]; //最大值
int maxIndex = 0;//最大索引值
for (int i =1; i<arra.length ; i++){ //max和整个数组进行比较
if (arra[i] > max){
max = arra[i]; //max小 就赋值
maxIndex = i; //最大值元素下标
}
}
System.out.println("max=" + max + " , maxindex=" + maxIndex);
}
}
public class ArrayTest3{
public static void main(String[] args) {
//3) 请求出一个数组的和和平均值。
//定义 一个数组
int arr1[] = new int[]{12,34,23,45,65,865,43};
int sum = 0; //和
double avg = 0; //平均值
for (int i=0; i<arr1.length ; i++ ){
sum += arr1[i];
}
avg = sum / arr1.length;
System.out.println("sum = "+ sum + ",avg=" + avg); //sum = 1087,avg=155.0
//数组的拷贝
//定义数组
int arr2[] = {1,34,5,53,78};
//在定义一个数组,和arr2一样长度
int arr02[] = new int[arr2.length];
int arr01[] = new int[arr2.length];
//把arr2数组打印出来
for (int i =0; i< arr2.length ; i++ ){
System.out.print("arr2=" + arr2[i] + "\n");
}
System.out.println();
//复制,有两种 一种的复制地址值,如下
arr02 = arr2; //这种复制的结果是 如果arr02改元素值,则arr2对应的值也会改。
arr02[0] = 100;
//打印看看结果
for (int i =0; i< arr02.length ; i++ ){
System.out.print("arr02=" + arr02[i] + "\n");
}
System.out.println();
//把arr2数组打印出来
for (int i =0; i< arr2.length ; i++ ){
System.out.print("arr2=" + arr2[i] + "\n");
}
System.out.println();
//第二种复制,是将元素值复制,相当于在开辟个空间
for (int i =0; i< arr2.length ; i++ ){
arr01[i] = arr2[i];
}
//将元素的值替换,在看效果
arr01[0] = 100;
//打印看效果
for (int i =0; i< arr01.length ; i++ ){
System.out.print("arr01=" + arr01[i] + "\n");
}
}
}
public class ArrayTest4{
public static void main(String[] args) {
//数组的反转
//要求:随机生成五个数,并将其反转打印,把数组的元素内容反转。
//方法1 , 通过找规律反转
//方法2, 通过将数组进行逆序赋值方法
//方法一思路
/*
int arr1[] = {1,2,3,4,5};
第一次: arr1= {1,2,3,4,5} -》1和5 交换 {5,2,3,4,1}
第二次: arr1={5,2,3,4,1} -》2 和4 交换 {5,4,3,2,1}
总结规律:交换次数arr.length /2 =>5/2 = 2
arr[0] 与arr[4] 交换 arr[1] 与arr[3] arr[i] 与arr[arr.length -1 - i]
*/
int arr1[] = {1,2,3,4,5};
for (int i =0; i< arr1.length ; i++ ){
System.out.print("arr1=" + arr1[i] + "\t");
}
int temp = 0;//中间变量
for (int i=0; i< arr1.length / 2 ; i++ ){
temp=arr1[i] ;
arr1[i] = arr1[arr1.length-1-i];
arr1[arr1.length-1-i] = temp;
}
System.out.println("方法一交换后的数组");
for (int i =0; i< arr1.length ; i++ ){
System.out.print("arr1=" + arr1[i] + "\t");
}
System.out.println("方法二交换后的数组");
//方法二 通过将数组进行逆序赋值方法 (用一个变量)
for (int i =arr1.length -1; i>=0 ; i--){
System.out.print("arr1=" + arr1[i] + "\t");
}
int arr2[] = new int[]{2,3,4,5,6};
//定义和arr2数组一样长度的数组
int arrNew[] = new int[arr2.length];
//遍历arr(反向遍历)将元素赋值给arrNew (用两个变量)
for (int i= arr2.length - 1 ,j=0; i>=0 ; i-- , j++){ //i是arr2的元素的下标, j 是arrNew的下标
arrNew[j] = arr2[i];
}
System.out.println("方法二交换后的数组(两个变量 i,j)");
for (int i = 0; i < arrNew.length ; i++ ) {
System.out.print(arrNew[i] + "\t");
}
}
}
import java.util.Scanner;
public class ArrayTest5 {
public static void main(String[] args) {
//数组添加
/*
1) 要求:实现动态的给数组添加元素效果,实现对数组扩容。。
2) 原始数值使用静态分配
3) 增加的元素,直接放在数组的最后
4) 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
思路:
1. 原始数组 int arr1[] = {1,23,54,56,34};
2. 创建一个比原数组大1的数组 int arrNew[] = new int[arr1.length + 1]
3. 将原数组的值赋给 新数组
4. 将新来的元素addScores 加到 arrNew数组最后 arrNew[arrNew.length - 1] = addScores
*/
Scanner sc = new Scanner(System.in);
int arr1[] = {1,23,54,56,34}; //原数组
char key = ' '; //判断
int addScore; //输入的数据
do{
System.out.println("是否添加元素");
key = sc.next().charAt(0);
if (key == 'y'){ //添加
System.out.println("输入添加成绩:");
addScore = sc.nextInt();
int arrNew[] = new int[arr1.length + 1]; //扩展的数组
for (int i =0; i< arr1.length ; i++ ){ //赋值给arrNew
arrNew[i] = arr1[i]; //拷贝
}
arrNew[arrNew.length - 1] = addScore; //添加输入的数据
arr1 = arrNew;
}
}while (key != 'n');
//遍历扩容的数组
for (int j=0; j<arr1.length ; j++ ){
System.out.print("arr1[" + j + "]=" + arr1[j] + "\t");
}
//上面的题自己写一遍 按思路
int arr1[] = {1,23,54,56,34}; //原始数组
int arrNew[] = new int[arr1.length +1]; //创建新的数组
int addScore = 90; //要填加的元素
for (int i=0; i< arr1.length ; i++ ){ //先将原始数组添加到新数组中
arrNew[i] = arr1[i];
}
arrNew[arrNew.length -1] = addScore; //添加元素
//为了处理方便,扩容后,将 scoresNew 赋给 scores
arr1 = arrNew;
//遍历
for( int i = 0 ; i < arrNew.length; i++) {
System.out.print(arrNew[i] + "\t");
}
}
}
public class ArrayTest6 {
public static void main(String[] args) {
//数组指定位置添加元素
//要求:实现动态的给数组添加元素效果(指定位置添加)
int arr1[] = {1,2,3,4,5};
//在index = 1,出添加addNum = 100;
/*
思路:
1. 创建一个新数组 ,大小 int arrNew[] = new int[arr1.length + 1];
2. 将索引1前面的元素拷贝到新数组中,其他数组向后移一位,空出索引1的位置
3. arrNew[] ={1,2,3,4,5,0};
4.往后移 arrNew[] ={1,2,2,3,4,5};
5. 将插入的数据插入到index = 1处
*/
int arrNew[] = new int[arr1.length + 1];
int index = 1; //添加数的索引
int addNum = 100; //添加得数
for (int i =0;i<arr1.length ; i++ ){
arrNew[i] = arr1[i]; //将arr1的元素赋值
}
//开始后移,从下标 arrNew.length -2,移动到下标为1
for (int i = arrNew.length-2; i>=index; i-- ){
arrNew[i + 1] = arrNew[i];
}
//将插入的数据插入到位置
arrNew[1] = addNum;
//遍历
for( int i = 0 ; i < arrNew.length; i++) {
System.out.print(arrNew[i] + "\t");
}
/*
思路在来一次
先创建一个新的数组arr2 ,大小 arr1.length + 1
将原来的数组拷贝到arr2
将arr2数组开始后移从 下标为arr2.length-2 ,移动到 index=1
将要插入的数据 赋值给 arr2【index】= 100;
*/
//指定位置添加数组 第二种方法
/*
思路:
定义一个新数组,大小arr1.length + 1 {0,0,0,0,0,0}
将原数组拷贝到新数组中,留出index = 1 索引的位置 {1,0,2,3,4,5}
在index=1 出插入数据 {1,100,2,3,4,5}
*/
System.out.println();
int arr[] = {1,2,3,4,5};
int arrNew1[] = new int[arr.length + 1];
int index1 = 2;
int addNum1 = 110;
for (int i =0,j=0; i<arrNew1.length ; i++ ){
if (i != index1){
arrNew1[i] = arr[j];
j++;
}
}
//for( int i = 0 ; i < arrNew1.length; i++) {
//System.out.print(arrNew1[i] + "\t");
//}
arrNew1[index1] = addNum1;
//遍历
for( int i = 0 ; i < arrNew1.length; i++) {
System.out.print(arrNew1[i] + "\t");
}
}
}
public class ArrayTest7{
public static void main(String[] args) {
//冒泡排序
/*
arr = {72,21,89,16}
思路:1让前面的数和后面的数比较,大于后面的数就交换
第一轮排序,目标将最大的放到最后
第一次排序:{21,72,89,16}
第二次排序:{21,72,89,16}
第三次排序:{21,72,16,89}
第二轮排序:目标将第二大得数放到第一大的数前面
第一次排序:{21,72,16,89} 21 和 32 比
第二次排序:{21,16,72,89} 72 和56 比
第三轮排序:第三大的数放到第二大得数前
第一轮:{16,21,72,89} 21 和16 比
*/
//代码实现
int arr[] = {72,21,89,16};
int temp = 0; //中间变量
for (int i= 0; i< arr.length -1; i++){ //控制 轮 数 共三轮
for (int j = 0; j<arr.length - 1 - i; j++){ // 控制每轮的循环次数 3,2,1
//交换元素
if (arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j+1] ;
arr[j+1] = temp;
}
}
}
for (int j =0; j<arr.length ; j++ ){
System.out.print(arr[j] + "\t");
}
//第一轮:
/*
int arr[] = {72,21,89,16};
int temp = 0; //中间变量
for (int i = 0; i <3 ; i++ ){
//交换元素
if (arr[i] > arr[i + 1]){
temp = arr[i];
arr[i] = arr[i+1] ;
arr[i+1] = temp;
}
}
for (int j =0; j arr[i + 1]){
temp = arr[i];
arr[i] = arr[i+1] ;
arr[i+1] = temp;
}
}
for (int j =0; j arr[i + 1]){
temp = arr[i];
arr[i] = arr[i+1] ;
arr[i+1] = temp;
}
}
for (int j =0; j
}
}
public class ArrayTest8{
public static void main(String[] args) {
//数组查找
/*
有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王
猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称
【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。[两种方式]
思路:定义数组,定义变量装你要猜的名字name,定义index装载下标
用name 与数组里的每个元素对比,相同就退出,输出
*/
/*
String arr[] = {"白眉鹰王","青翼蝠王","紫衫龙王","青翼蝠王","青翼蝠王","金毛狮王","青翼蝠王"};
int index = -1;
String name = "青翼蝠王";
for (int i =0; i
String arr[] = {"白眉鹰王","青翼蝠王","紫衫龙王","青翼蝠王","青翼蝠王","金毛狮王","青翼蝠王"};
/*
找到所有青翼蝠王
定义一个int存储找到的数量
创建一个数组保存找到的下标 大小与原数组一样大 (最坏的打算,全是)
*/
int index = -1; //索引从0开始
int count = 0;
String name = "青翼蝠王";
int arrdex[] = new int[arr.length];
for (int i=0; i< arr.length ; i++ ){
//比较
if (name.equals(arr[i])){
System.out.println("找到了");
index = i; //记录下标
arrdex[count++] = i; //count是新数组里的下标。i记录的是原数组查找内容的下标
}
}
for (int i = 0; i< arrdex.length ; i++ ){
System.out.println("找到的名字为:" + name + "索引为" + arrdex[i]);
}
/*
有个坑
找到的名字为:青翼蝠王索引为1
找到的名字为:青翼蝠王索引为3
找到的名字为:青翼蝠王索引为4
找到的名字为:青翼蝠王索引为6
找到的名字为:青翼蝠王索引为0
找到的名字为:青翼蝠王索引为0
找到的名字为:青翼蝠王索引为0
输出结果 0不需要,这是 输出范围大于元素个数范围了,控制输出范围即可
如下
*/
for (int i = 0; i< count ; i++ ){
System.out.println("找到的名字为:" + name + "索引为" + arrdex[i]);
}
}
}