关于数组的练习

Summing Values 求和

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,23,43,76,77,38,19};
		
		int result=0;
		for(int target:a){
			result += target;
		}
		System.out.println(result);
	}
}

用for each 循环

Swap two values  交换

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		//exchange 77 with 33
		//use a temp
		int temp=a[1];
		a[1]=a[4];
		a[4]=temp;
		
		for(int target:a){
			System.out.println(target);
		}
		
	}
}

使用一个中间变量,将被更换的变量暂时存放

Remove values --在动态数组中,删除元素

将静态数组的元素,全部放到动态数组里面去,并且删除全部的奇数

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		ArrayList<Integer> b= new ArrayList<Integer>();
		//会自动的将一个基本数据类型转换成引用数据类型
		for(int target:b){
			System.out.println(target);
		}
		
		for(int i=0;i<b.size();i++){
			//获得b数组第i位的数值
			//将奇数位的数字删掉
			if(b.get(i)%2==1){
				b.remove(i);
			}
		}
		System.out.println("After deletion:")
		for(int target:b){
			System.out.println(target);
		}
	}
}
import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		ArrayList<Integer> b= new ArrayList<Integer>();
		
		for(int target:a){
			b.add(target);
			//b.add(new Integer(target));
		}
		for(int target:b){
			System.out.println(target);
		}
		
		for(int i=0;i<b.size();i++){
			
			if(b.get(i)%2==1){
				b.remove(i);
			}
		}
		System.out.println("After deletion:");
		for(int target:b){
			System.out.println(target);
		}
	}
}

 结果却发现,并没有把33这个奇数删掉,因为动态数组,每删掉一个,每个元素的序列号也会发生改变,这样将导致不一定会遍历到每一个元素。

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		ArrayList<Integer> b= new ArrayList<Integer>();
		
		for(int target:a){
			b.add(target);
			//b.add(new Integer(target));
		}
		for(int target:b){
			System.out.println(target);
		}
		
		for(int i=0;i<b.size();i++){
			
			if(b.get(i)%2==1){
				b.remove(i);
			}
		}
		System.out.println("After deletion:");
		for(int target:b){
			System.out.println(target);
		}
//将循环变为从后往前删除
//解法不唯一,可以自己做一些探讨
		//fix bug
		for(int i=b.size()-1;i>=0;i--){
			
			if(b.get(i)%2==1){
				b.remove(i);
			}
		}
		System.out.println("The Second time deletion:");
		for(int target:b){
			System.out.println(target);
		}
	}
}

find the largest value/smallest value

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		int max=0;
		for(int i=0;i<a.length;i++){
			if(a[i]>max){
				max=a[i];
			}//greedy algorithm
		}
		System.out.println(max);
	}
}

但是这个代码是有大bug 的,如果比较的元素值都是复数,那么max就会一直是0,而无法取到最大值。

所以max的初始值的设置,可以设置为数组中本身存在的数比如a[0].

find the index of the largest value /smallest value

import java.util.ArrayList;

class Test{
	public static void main(String args[]){
		int[] a={21,33,43,76,77,38,19};
		int max=a[0];
		int min=a[0];
		//index of max number
		int p1=0;
		//index of min number
		int p2=0;
		for(int i=0;i<a.length;i++){
			if(a[i]>max){
				max=a[i];
				p1=i;
			}//greedy algorithm
			if(a[i]<min){
				min=a[i];
				p2=i;
			}
		}

		System.out.println("Max value is :"+max+" , at "+p1);
		System.out.println("Min value is :"+min+" , at "+p2);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值