首先就是输入输出,之前看的那本书讲到输入输出时已经是两百多页了,,,果断换书。看的这本《Java面向对象程序设计》,目前自我感觉良好。
输入输出
输入时可以用Scanner来创建对象:
Scanner reader = new Scanner(System.in);
然后reader对象调用方法nextBoolean(),nextByte(),nextDouble(),nextInt(),nextFloat(),nextShort(),nextLong(),读取在命令行输入的各种基本类型数据。如:
int a=reader.nextInt(),b=reader.nextInt();
输出时System.out.println()和System.out.print()可以输出字符、表达式的值,区别在于前者输出时会自动输出一个换行,后者不会,允许使用并置符号“+”来连接前后。如:
int x=1;
System.out.println("x="+x); //输出x=1
Java还有类似c语言的printf函数用来输出带有格式控制的数据,用法和c相同,特别的,Java的double类型使用“%f”,如:
System.out.printf("%d %f\n",a,b);
数组
Java的数组声明和c也差不多,有两种形式:
int[] a;
int a[];
特别的,Java不允许在方括号中指定元素个数,上面的语句只是声明一个数组a,并未分配内存。所以还须采用new创建,
int a[];
a=new int[10];
int a=new int[10];
上面是两种创建方法,这样一维数组就可以使用了,也可以在声明数组时初始化,如:
char ac[]= {'a','v'};
二维数组的使用同一维数组,只是多了一个方括号,特别的,二维数组相当于多个一维数组组成,这些一维数组长度不必相等,
int x[][] = new int[2][];
x[0]=new int[10];
x[1]=new int[5];
//或
int x[][]=new int[2][3];
Java还允许这样使用
int size=30;
int x[]=new int[size];
特别的,Java中数组属于引用类型,
x=y; //这样会把x所指内存空间释放掉,使得x和y指向同一块内存空间,此时x[]={1,2},这时使用x或y实际上是一样的,改变其中一个,另一个也会改变。
遍历数组
一种是同c一样的
int y[]= {3,0,1};
for(int i = 0;i < y.length;i++) {
System.out.println(y[i]); //3,0,1
}
另一种是
int y[]= {3,0,1};
for(int i:y) {
System.out.println(i); //3,0,1
}
注意:i的类型应该和数组y的类型相同,而且下面这种写法是错误的,
int y[]= {3,0,1};
int i=0; //错误
for(i:y) {
System.out.println(i);
}
变量i必须重新声明,不能使用已有的变量。
clone()的使用
那么如何复制数组呢,可以使用循环来复制,也可以使用clone(),如:
char ac[]= {'a','v'};
char ax[]= {'b'};
ac=ax.clone();
System.out.println(ax); //b
System.out.println(ac); //b
length的使用
对于一维数组x[10],x.length=10,即一维数组的长度,对于二维数组x[2][3],x.length=2,即二维数组中一维数组的个数。
Arrays.toString()的使用
数组a[2]={1,2}; Array.toString(a)可以将整型转换为字符型,需import java.util.*,如:
int a[]= {1,2};
System.out.println(Arrays.toString(a)); //[1, 2]
copyOf()和copyOfRange()
int y[]= {1,2};
int z[]=Arrays.copyOf(y,3); //z[]={1,2,0};
int z[]=Arrays.copyOf(y,1); //z[]={1};
int y[]= {1,2};
int z[]=Arrays.copyOfRange(y,0,3); //z[]={1,2,0};
int z[]=Arrays.copyOfRange(y,0,2); //z[]={1,2};
其中,copyOf(y,newLength)为从y中0位置开始复制长度为newLength,若newLength的值大于原数组则填充默认值。
copyOfRange(y,from,to)为从y中from开始到to-1的位置,若to的值大于原数组则填充默认值。
Arrays.sort()
int y[]= {3,0,1};
Arrays.sort(y); //y[]={0,1,3};
默认升序排序。
Arrays.binarySearch()
Arrays.binarySearch(double[] a,double number)可以查找参数number是否在指定数组中,其中a必须是已排好序的数组,若找到则返回位置,否则返回负数。
int y[]= {3,0,1};
Arrays.sort(y); //y[]={0,1,3};
int index=Arrays.binarySearch(y,3); //index=2
equals()
Arrays.equals()用来比较两个数组是否相等,返回逻辑值true或false,如:
int x[]= {5};
int y[]= {1,2};
System.out.println(Arrays.equals(x,y)); //false