数组
1.数组的概念
数组:就是一个容器,用来储存数据(数组可以是基本类型,也可以是引用类型)
2.数组的基本使用
先声明及初始化数组
int[] arr=new int[];
3.数组遍历的方式
for循环
增强for
数组的特点
数组本身是一个引用数据类型
数组是在堆内存中的一串连续的地址存在
数组在初始化时必须指定长度
堆内存的数组空间长度一旦确定 不能再次发生改变
栈内存的变量中存储的是数组的地址引用
数组内部存储的类型可以是基本的 也可以是引用
数组的案列
1.创建一个数组用来存储1-100之间的奇数
/*
分析:
1.遍历1-100的之间的奇数,
2.判断i%2!=0是否不等0 是 添加一个计数器,记录i%2!=0的个数
3.创建一个动态数组
4.遍历1-100的之间的奇数,
5..判断i%2!=0是否不等0 是 将不等于的数存入数组中
*/
public class Demo{
public static void main(String[] args){
int count=0;
int index=0;
for(int i=1;i<100;i++){
if(i%2!=0){
count++;
}
}
System.out.println(count);
int[] arr=new int[count];
for(int i=1;i<100;i++){
if(i%2!=0){
arr[index++]=i;
}
}
for(int value:arr){
System.out.print(value+"\t");
}
}
}
2.给定两个数组a{1,2,3,4} b{5,6,7,8} 将两个数组内的元素对应位置互换
/*
分析:
思路1:
1.对数组进行遍历,
2.定义一个临时变量,用来存储要交换的值
思路2:
1.定义一个临时数组并赋值
2.进行交换
*/
public class Demo{
public static void main(String[] args){
int[] arr1={1,2,3,4,5};
int[] arr2={6,7,8,9,10};
//思路1:
/* for(int i=0;i<arr1.length;i++){
int temp=arr1[i];
arr1[i]=arr2[i];
arr2[i]=temp;
} */
int[] temp=arr1;
arr1=arr2;
arr2=temp;
for(int arr:arr1){
System.out.print(arr+"\t");
}
System.out.println();
for(int arr:arr2){
System.out.print(arr+"\t");
}
}
}
3.给定一个数组arr{1,2,3,4,5,6} 将这个数组中的元素头尾对应互换位置
/*
分析:
1.将数组进行遍历,将数组的长度除以2
arr[0]---------------------arr[5]
arr[1]---------------------arr[4]
arr[2]---------------------arr[3]
*/
public class Demo{
public static void main(String[] args){
int[] arr={1,2,3,4,5,6} ;
for(int i=0;i<arr.length/2;i++){
int temp=arr[i];
arr[i]=arr[(arr.length-1)-i];
arr[(arr.length-1)-i]=temp;
}
for(int item:arr){
System.out.println(item);
}
}
}
4.给定一个数组,计算数组的所有平均值
public class Demo{
public static void main(String[] args){
int[] arr={1,2,3,4,5,6};
double value=0;
for(int i=0;i<arr.length;i++){
value+=arr[i];
}
System.out.println("平均值:"+value/arr.length);
}
}
5.求数组的最大值和最小值
public class Demo{
public static void main(String[] args){
int[] arr={1,3,5,7,9,0,2,4,6,8};
int max=arr[0];
int min=arr[0];
for(int i=1;i<arr.length;i++){
if(max<arr[i]){
max=arr[i];
}
if(min>arr[i]){
min=arr[i];
}
}
System.out.println("最大值:"+max);
System.out.println("最大值:"+min);
}
}
6.将两个数组合并成一个新数组
/*
分析:
1.创建一个新数组,新数组的长度等于两个数组长度之和
2.遍历旧数组,将旧数组的值赋值给新数组
*/
public class Demo{
public static void main(String[] args){
int[] arr1={1,2,3,4,5};
int[] arr2={14,15};
int[] newArr=new int[arr1.length+arr2.length];
for(int i=0;i<arr1.length;i++){
newArr[i]=arr1[i];
}
for(int i=0;i<arr2.length;i++){
newArr[i+arr1.length]=arr2[i];
}
for(int value:newArr){
System.out.print(value+"\t");
}
}
}
7.给定一个数组,按照数组中的最大值位置 将数组拆分成两个
/*
分析:
1.先遍历数组,找到数组的最大值
2.定义一个变量,记录数组最大值的索引
3.创建两个数组,第一个数组的长度等于记录数组索引的变量
第二个数组的长度等于旧数组的长促减去第一个数组的长度
4.循环数组,将值赋值给数组
*/
public class Demo{
public static void main(String[] args){
public static void show6(){
int[] oldArr={22,45,78,23,56,98,41,31,87,68};
int max=oldArr[0];
int index=0;
for(int i=1;i<oldArr.length;i++){
if(oldArr[i]>max){
max=oldArr[i];
index=i;
}
}
System.out.println("最大值的索引:"+index);
int[] arr1=new int[index];
int[] arr2=new int[(oldArr.length-1)-index];
for(int i=0;i<arr1.length;i++){
arr1[i]=oldArr[i];
}
for(int i=0;i<arr2.length;i++){
arr2[i]=oldArr[(index+1)+i];
}
for(int value:arr1){
System.out.println(value);
}
System.out.println("==================================");
for(int value:arr2){
System.out.println(value);
}
}
}
8.给定一个数组,将指定的数组的值去掉,生成一个新数组
public class Demo{
public static void main(String[] args){
//给定一个数组a{1,2,3,0,0,4,5,0,6,0,7}
//去掉数组中的0元素 (创建一个新数组 短的 非零元素挑出来)
/*
分析:
1.遍历数组
2.判断数组中的值等不等于0 不等于0 定义一个变量 记录不等于零的个数
3.创建一个新数组 数组的长度就等于不等于零的个数
4.对旧数组进行遍历
5.判断将数组中不等于零的值存入新数组
*/
public static void show7(){
int[] arr= {1,2,3,0,0,4,5,0,6,0,7};
//1.遍历数组
int count=0;
int index=0;
for(int i=0;i<arr.length;i++){
//2.判断数组中的值等不等于0 不等于0 定义一个变量 记录不等于零的个数
if(arr[i]!=0){
count++;
}
}
//创建一个新数组 数组的长度就等于不等于零的个数
int[] newArr=new int[count];
//3.创建一个新数组 数组的长度就等于不等于零的个数
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
//定义一个变量,用来记录newArr的索引
newArr[index++]=arr[i];
}
}
for(int value:newArr){
System.out.println(value);
}
}
}
9.将2-100之间的素数存储到数组中
public class Demo{
public static void main(String[] args){
int count=0;
int index=0;
for(int i=2;i<100;i++){
boolean flag=false;
for(int j=2;j<i-1;j++){
if(i%j==0){
flag=true;
}
}
if(!flag){
count++;
}
}
int[] arr=new int[count];
for(int i=2;i<100;i++){
boolean flag=false;
for(int j=2;j<i-1;j++){
if(i%j==0){
flag=true;
}
}
if(!flag){
arr[index++]=i;
}
}
for(int value:arr){
System.out.println(value);
}
}
}
10.实现用户登录功能
import java.util.Scanner;
public class UserLogin{
public static void main(String[] args){
//1.从数据库拿到数据(没得数据库,用数组代替)
String[] str={"谭淋","java","python"};
int[] arr={123,456,789};
//2.用户输入的名字和密码
Scanner scan = new Scanner(System.in);
System.out.println("请输入您的账号:");
String user=scan.nextLine();
System.out.println("请输入您的密码:");
int pwd=scan.nextInt();
//3.数据库进行遍历
boolean flag=false;
for(int i=0;i<str.length;i++){
//4.对用户输入的账号进行判断 对 停止遍历账号 进行密码判断
if(str[i].equals(user)){
if(arr[i]==pwd){
System.out.println("登陆成功");
}else{
System.out.println("账号或密码错误");
}
flag=true;
break;
}
}
if(!flag){
System.out.println("账号或密码错误");
}
}
}