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

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(num
0){
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值