java基础:3.1 一维数组、foreach、数组复制

1 数组申明: double [] myList;   

声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置

2 创建数组:  myList = new double [3];

这条语句做了两件事情:1 ) 使用new elementType[arraySize]创建了一个数组;2 )把这个新创建的数组的引用陚值给变暈arrayRefVar(myList)。

3 结合:(1和2等价)

(1) .double [] myList = new double [3];   //只声明、创建,后续再赋值

   myList[0] =1.0;

   myList[1] =2.0;

   myList[2] =5.5;

(2) .double [] myList = { 1.0 , 2.0 , 5.5 };   // 声明、创建、初始化一条语句完成了。

一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引用。:myList 是一个含有3个double 型元素数组的引用变量

4.foreach

不使用下标变量就可以顺序地遍历整个数组

for (double e: myList)

   System.out.println(e);    //打印了myList的所有元素

5.数组的复制

不能和普通数据一样使用:list2 =list1;   // 这只是将list1的引用复制给了list2,他俩指向了同一个数组。list2的原数据变成了垃圾

arraycopy(sourceArray, srcPos, targetArray, tarPos, length);

srcPos,tarPos:sourceArray 和targetArray 中的起始位置。复制的元素个数由参数length 指定(java.lang.System类)

                 System.arraycopy(souce,0,s1,0,2);

6.给方法传递数组/从方法中返回数组/可变长数组

类比C语言中指针学习,给函数传递数组的指针,在函数内改变数组的内容,函数外的数组内容也将改变。

和给方法传递基本数据类型不同。
可变长数组:只能给方法中指定一个可变长参数,同时该参数必须是最后一个参数

package basic_practice_002;

public class None_array {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] list1 =  {1,3,6,7,9,25,98,63,7,0,5,11,77,62,34,0,5,77,6,5};
		int [] list2 = new int [8];
		System.arraycopy(list1,7,list2,0,8);
		System.out.print("old list2 array:   ");
		for(int e:list2)
		System.out.print(e + "  ");
		System.out.println();
		change_1_2(list2);
		System.out.print("After change_1_2:  ");
		for(int e:list2)
			System.out.print(e + "  ");System.out.println();
		list2 = reversal(list2);
		System.out.print("reversal list2:    ");
		for(int e:list2)
			System.out.print(e + "  ");	
	}
	
	public static void change_1_2(int []m) {   //传递数组给方法
		int temp =m[1];
		m[1] = m[0];
		m[0] = temp;
	}

	public static int[] reversal(int []m) {    //从方法中返回数组
		int []y=new int[m.length];
		for(int i=0;i<m.length;i++)
			y[i]=m[m.length-1-i];
		return y;
	}
	
	public static void printArray(int...m) {   //可变长数组
		if(m.length==0) return;
		for(int i=0;i<m.length;i++) 
			System.out.print(m[i]);
	}
}

计算随机生成的100位小写字母中,a~~~z的个数分别为多少

package basic_practice_002;

public class CountLetter {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final int LetterNumbers = 100;
		char []letter = new char[LetterNumbers];
		int []countLetter = new int[26];
		for(int i=0;i<LetterNumbers;i++){
			 letter[i]=getRandomLowerCharacter();
			 int index=letter[i]-'a';
			 countLetter[index] += 1;
		}
		for (int i=0;i<LetterNumbers;i++) {
			System.out.print(letter[i] + " ");
			if((i+1)%25==0) System.out.println();
		}
		System.out.println();
		for (int i=0;i<26;i++) {
			System.out.print( (char)('a'+i) + " "+ countLetter[i] + "   ");
			if((i+1)%10==0) System.out.println();
		}
		
	}
	
	public static char getRandomCharacter(char chl, char ch2){
		return(char)(chl + Math.random()*(ch2 - chl + 1));}
	
	public static char getRandomLowerCharacter(){
		return getRandomCharacter('a','z');
	}
}

命令行调用main函数的例子(简易计算器):

public class testMain {       // 调用Main,传递参数args

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		if(args.length!=3) {
			System.out.println("Usage: java Calculator operandl operator operand2");
			System.exit(0);
		}
		int result=0;
		switch(args[1].charAt(0)) {
			case '+' :  result=Integer.parseInt(args[0])+Integer.parseInt(args[2]);break;
			case '-' :  result=Integer.parseInt(args[0])-Integer.parseInt(args[2]);break;
			case '.' :  result=Integer.parseInt(args[0])*Integer.parseInt(args[2]);break;
			case '/' :  result=Integer.parseInt(args[0])/Integer.parseInt(args[2]);break;
		}
		System.out.println(":  " +Integer.parseInt(args[0])+ args[1].charAt(0) +Integer.parseInt(args[2]) +
				"result is " + result);
			
	}

}

结果如下:

原文地址:https://www.cnblogs.com/l20902/p/10610953.html