第六章:一维数组知识点及习题

xiaoxiao2022-05-13  32

1.数组的定义:存储同一类型数据的一个集合。 2.数组的特点:一旦被创建,它的大小是固定的;使用一个数组引用变量,通过下标来访问数组中的元素;数组的下标总是从0开始,所以若数组的长度为length,则它最后一个元素的下标为length-1;这里注意不要出现越界错误 3.数组的遍历:遍历它的角标,通过角标来访问元素; //一唯数组的遍历: int[] b=new int[]{1,2,3,4}; for(int i=0;i<b.length;i++){ System.out.print(b[i]); ///System.out.println(Arrays.toString(b); } **例题6.1:打印输入的数组中每个数字出现的次数; 思路:先定义两个数组,一个为数字,一个为次数,然后对输入的数字进行判断,若第一次出现,给number数组扩容并存入,count1;若第二次出现,给count++; public static void main(String[] args) { int[] numbers=new int[0]; int[] counts=new int[0]; //输入数据,直到0为止 Scanner scanner=new Scanner(System.in); System.out.println(“enter the numbers beetween 1 and 100”); while(true){ int num=scanner.nextInt(); if(num0){ break; } int index=isContains(numbers,num); if(index==-1){//不存在,扩容并存入 numbers=Arrays.copyOf(numbers,numbers.length+1);//扩容 numbers[numbers.length-1]=num;//存入 counts=Arrays.copyOf(counts,counts.length+1); counts[counts.length-1]=1; }else{//存在的话,次数加一 counts[index]++; } } for(int i=0;i<numbers.length;i++){ System.out.printf("%d occurs %d %s\n",numbers[i],counts[i],counts[i]==1?“time”:“times”); } } public static int isContains(int[] numbers, int num) {//判断num是否包含在numbers数组中,返回角标 for(int i=0;i<numbers.length;i++){ if(numbers[i]num){ return i; } } return -1; } 总结:这里要注意如何给数组扩容并存入元素: **if(index-1){//不存在,扩容并存入 numbers=Arrays.copyOf(numbers,numbers.length+1);//给numbers[]扩容 numbers[numbers.length-1]=num;//存入一个元素 counts=Arrays.copyOf(counts,counts.length+1);给counts[]扩容 counts[counts.length-1]=1;给counts存入元素 例题6.10:比较输入的两个数组是否相等:(输入的第一个数字为元素的个数) public class test6_10两个数组是否相等 { public static void main(String[] args) { 输入两个数组,第一个数字是数组长度 Scanner scanner=new Scanner(System.in); System.out.println(“enter list1”); int length1=scanner.nextInt(); int[] list1=new int[length1]; for(int i=0;i<list1.length;i++){ list1 [i]=scanner.nextInt(); } System.out.println(“enter list2”); int length2=scanner.nextInt(); int[] list2=new int[length1]; for(int i=0;i<list2.length;i++){ list2[i]=scanner.nextInt(); } System.out.println(equal(list1,list2)); } private static boolean equal(int[] list1, int[] list2) { //先判断长度,长度不相等直接返回false if(list1.length!=list2.length){ return false; } //再判断内容 for(int i=0;i<list1.length;i++){ if(list1[i]!=list2[i]){ return false; } return true; } } 例题6.13:判断数组中是否连续四个相等: public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println(“inter a number of values”); int len =scanner.nextInt();//输入数组长度 System.out.println(“enetr the value”); int[] nums=new int[len];//输入数组元素 for(int i=0;i<nums.length;i++){ nums[i]=scanner.nextInt(); } boolean b=isConsecutiveFour(nums);//编写方法判断数组中是否有四个连续相等的元素 System.out.println(b);/输出结果为true 或false } public static boolean isConsecutiveFour(int[] nums){//比较数字是否连续四个相等 for(int i=0;i<nums.length-1;i++){ int count=1; for(int j=i+1;j<nums.length;j++){ if(nums[i]==nums[j]){//若有相等的元素,给count+1; count++; }else{ break; } } if(count>=4){//若count>=4,直接返回true; return true; } } return false; } **例题6.14:**将两个有序数组合并为一个新的有序数组: public static void main(String[] args) { 输入两个数组,第一个数字是数组长度 Scanner scanner=new Scanner(System.in); System.out.println(“enter list1:”);输入list1 int length1=scanner.nextInt(); int[] list1=new int[length1]; for(int i=0;i<list1.length;i++){ list1 [i]=scanner.nextInt(); } System.out.println(“enter list2:”);//输入list2 int length2=scanner.nextInt(); int[] list2=new int[length2]; for(int i=0;i<list2.length;i++){ list2[i]=scanner.nextInt(); } int list3[]=hebing(list1,list2);///list3为list1和list2的合并 System.out.println(“合并的新数组是:”+Arrays.toString(list3)); } public static int[] hebing(int[] list1,int[] list2){///编写方法用来合并这两个数组 for(int i=0;i<list2.length;i++){///给list1扩容 ,将list2中元素放进去 list1=Arrays.copyOf(list1,list1.length+1); list1[list1.length-1]=list2[i]; } Arrays.sort(list1);//最后进行排序 return list1;/返回list1; }

转载请注明原文地址: https://www.6miu.com/read-4884174.html

最新回复(0)