一维数组及经典应用
程序员文章站
2022-05-04 11:41:48
一、数组的定义数组是一个变量,存储相同数据类型的一组数据;数组的下标由0开始向上递增。数组的声明,分配空间和赋值public static void main(String[] args) { //声明 int[] a; String b[]; double []c; //分配空间 ,使用new关键字来分配空间,new关键字在java语言中优先级最高 a=new int[5]; b=new...
一、数组的定义
数组是一个变量,存储相同数据类型的一组数据;
数组的下标由0开始向上递增。
数组的声明,分配空间和赋值
public static void main(String[] args) {
//声明
int[] a;
String b[];
double []c;
//分配空间 ,使用new关键字来分配空间,new关键字在java语言中优先级最高
a=new int[5];
b=new String[6];
c=new double[4];
//赋值,空间为5不一定需要全部赋值
a[0]=10;
a[1]=11;
a[2]=12;
a[3]=16;
a[4]=15;
//声明的同时分配空间
char[] ch=new char[10];
float[] f={11.1f,22.2f};//声明分配空间并赋值
int[] d=new int[]{1,2,3};
}
遍历数组
public static void main(String[] args) {
int[] scores=new int[5];
Scanner input=new Scanner(System.in);
for (int a=0;i<score.length;i++){
scores[i]=input.nextlnt();
}
}
二、使用数组
计算30位同学的平均分,同事打印每一个分数
public static void main(String[] args) {
int[] scores=new int[30];
//使用随机数对数组进行赋值
for (int i = 0; i <30 ; i++) {
scores[i] = (int) (Math.random() * 80 +20);//scores[i] 数组的每个元素
}
//遍历查看数组中每一个元素
System.out.print("[");
for (int i = 0; i <scores.length ; i++) {
if (i == scores.length - 1) {
System.out.println(scores[i] + "]");
break;
}
System.out.print(scores[i]+",");
}
// //计算平均分
double sum=0;
double avg=0.0;
for (int i = 0; i <scores.length ; i++) {
sum+=scores[i];
}
System.out.println("总分为:"+sum);
System.out.println("平均分为:"+sum/scores.length);
}
三、取最大值/最小值
- 取最大值
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] scores=new int[5];
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第"+(i+1)+"个数:");
scores[i]=sc.nextInt();
}
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+",");
}
System.out.println();
//求最大值
int max=scores[0];
for (int i = 0; i < scores.length; i++) {
if (scores[i]>max){
max=scores[i];
}
}
System.out.println("最大值为:"+max);
}
- 取最小值
求4家店的最低手机价格
public static void main(String[] args) {
System.out.println("请输入4家店的价格");
Scanner sc = new Scanner(System.in);
int a[] = new int[4];
for (int i = 0; i < a.length; i++) {
System.out.println("输入第" + (i + 1) + "的价格");
a[i] = sc.nextInt();
}
int min = a[0];
for (int i = 0; i < a.length; i++) {
if (min > a[i]) {
min = a[i];
}
}
System.out.println("最低价格是:" + min);
}
四、数组元素的增减
- 增加元素
public static void main(String[] args) {
int[] a={99,85,82,63,60};
int[] b=new int[6];
for (int i = 0; i < a.length; i++) {
b[i]=a[i]; //另b数组前面的值与a一样(数组扩容)
}
System.out.println(Arrays.toString(b)); //打印数组
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数");
int num=sc.nextInt();
boolean isInsert=false;
for (int i = b.length-2; i >=0; i--) { //从后向前遍历,小的后移,大的在后方插入
if (num>b[i]){
b[i+1]=b[i]; //下标后移,即把值赋给后面一位
}else{
b[i+1]=num;
isInsert=true; //num插入数列
break;
}
}
if (isInsert==false){
b[0]=num;
}
System.out.println(Arrays.toString(b));
}
- 减少元素
public static void main(String[] args) {
int[] a={99,85,82,63,60};
int[] b=new int[4];
Scanner sc=new Scanner(System.in);
System.out.println("输入要删除的下标: ");
int num=sc.nextInt();
int j=0;
for (int i = 0; i < a.length; i++) {
if (i==num)continue;
b[j]=a[i];
j++;
}
System.out.println(Arrays.toString(b));
}
五、排序
- 选择排序
public static void main(String[] args) {
/*选择排序逻辑:
* 外层与内层比,只要找到比自己小的就交换
* */
int[] a= {3, 2, 1, 5, 8, 4};
for (int i = 0; i <a.length; i++) {
for (int j = i+1; j <a.length ; j++) {
int min=a[i];
if (a[i]>a[j]){
a[i]=a[j];
a[j]=min;
}
}
}
System.out.println(Arrays.toString(a));
}
- 插入排序
public static void main(String[] args) {
/*
*逻辑:从第二位开始,向前比较,进行插入逻辑
*/
int[] a={9,8,1,5,6,7};
for (int i = 1; i <a.length ; i++) {
int tmp=a[i];
boolean flag=false;
for (int j = i-1; j >=0 ; j--) {
//如果遇到比自己大的,大的值就后移
if (a[j]>tmp) {
a[j + 1] = a[j];
} else {
a[j + 1] = tmp;
flag=true;
break;
}
}
//如果遇到比自己小的,就在后方插入
//如果一直没插入就插入在首位
if (isInsert==false){ //!isInsert
a[0]=tmp;
}
}
System.out.println(Arrays.toString(a));
}
- 冒泡排序
冒泡排序对数组进行排序
public static void main(String[] args) {
int[] a={121,100,48,78,89,45,22,75,33};
//定义循环次数
for (int i = 0; i <a.length-1 ; i++) {
//循环比较的过程
for (int j = 0; j < a.length-1-i; j++) {
if (a[j]>a[j+1]){ //前一个比后一个大,则不满足升序
//进行交换
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
System.out.println(Arrays.toString(a));
}
六、 二分法查找数据
源码
public static void main(String[] args) {
int start=0;
int end=a.length;
while(true){
int mid=(start+end)/2;
if (start>end){
break;
}
if (start==end){
if (start>=a.length||end<0){
break;
}
System.out.println("未找到");
break;
}
if (a[mid]==num){
System.out.println("在下标为:"+mid+"的位置找到数值:"+num);
break;
}else if(a[mid]<num){
start=mid+1;
} else{
end=mid-1;
}
}
}
快捷选项
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要查找的数字");
int num=sc.nextInt();
int[] a={1,5,10,12,20,25,27,30};
int result=Arrays.binarySearch(a,num);
System.out.println(result<0?"没找到":"在下标为"+result);
本文地址:https://blog.csdn.net/timicai/article/details/107346130