数组习题:
5.1
(计算数字出现的次数) 编写程序,读取1到100之间的整数,然后计算每个数出现的次数。假定输入是以0结束的。下面是这个程序的一个运行实例:
思路1:数组长度不固定 需要读取一个数据 数组扩容 填入数据
数据填入之后进行排序 然后遍历数组依次判断数据的个数
连续相等
2 2 2 2 3 3 4 4 4 4 5 5 6 6 6 6 7 7
思路2:借助计数排序的思想 将数组固定起来
解题过程:
1.获取用户输入的数据 动态的扩容数组填充数据
验证用户输入数据的正确性:如果用户输入非法数据,结束程序,提示输入了非法数据,请重新输入。
2.按照输出结果 将数据中的数据进行排序
insertSort(arr);
3.输出连续相等的数字
show(arr); 次函数中运用了Arrays Math Arrays Math都是属于工具类
Arrays 特殊的是数组的工具类
toString(arr) 就是将数据的每个元素进行拼接 并返回拼接后的字符串数据
import java.util.*;
class Demo05_01{
public static void main(String[] args){
/*
思路1:数组长度不固定 需要读取一个数据 数组扩容 填入数据
数据填入之后进行排序 然后遍历数组依次判断数据的个数
连续相等
2 2 2 2 3 3 4 4 4 4 5 5 6 6 6 6 7 7
思路2:借助计数排序的思想 将数组固定起来
*/
//1.获取用户输入的数据 动态的扩容数组填充数据
Scanner scanner = new Scanner(System.in);
int[] arr=new int[0];
System.out.print("Enter numbers:");
while(true){
int num=scanner.nextInt();
if(num==0){
break;
}
//验证用户输入数据的正确性
if(num<1||num>100){
System.out.println("有非法数据!");
return;
}
arr=copyOf(arr,arr.length+1);
arr[arr.length-1]=num;
}
//2.按照输出结果 将数据中的数据进行排序
insertSort(arr);
//3.输出连续相等的数字
show(arr);
}
public static int[] copyOf(int[] arr,int newLen){ //数组的动态扩容,来也个数据,数组扩充一个储存空间
int[] newArr=new int[newLen]; //定义一个新数组
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr; //返回新的数组
}
public static void insertSort(int[] arr){ //进行插入排序(默认是从小到大排序)
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j;
for(j=i;j>0&&arr[j-1]>e;j--){ //最先判断出最大的那个数;若左边的数比要比的数小,那么这个数左边的数都比它小
arr[j]=arr[j-1]; //若左边的数比要比的数大,交换位置
}
arr[j]=e;
}
}
/*
Arrays Math都是属于工具类
Arrays 特殊的是数组的工具类
toString