for循环
for(<类型> <变量名>;<变量名> <逻辑表达式><数组范围>;<自增>{
代码部分; }
for(int i =0;i <arrays.length;i++){
System.out.println(arrays[i];
}
通常都是使用for循环,让循环变量i从0 到数组的length,这样循环体内最大的i 正好是数组最大的有效下标
常见错误是:
循环结束条件是是 <= 数组长度,或;
离开循环后,继续用i 的值来做数组元素的下标!
搜索,在给定的数据中,如何找出某个数据是否存在,线性搜索
Scanner input = new Scanner (System.in);
int[] data ={3,2,5,7,4,9,11,34,12,28};
int x = input.nextInt();
int loc =-1;//这里的意思是,先假设没找到,找到了就直接赋地址。
boolean found= false;
for( int i =0; i<data.length;i++){
if(data[i]==x){
loc = i;
break;
}
}
if (loc > -1){
System.out.println(x+"是在第"+(loc+1)+"个位置");
}
else {
System.out.println(x+"不在其中");
}
for-each循环
for(<类型><变量>:<数组>){
代码部分 }
for(int i:arrays){
System.out.println(arrays[i]);
}
for-each循环的意思,对于data数组中的每一个元素,循环的每一轮作为这个k,k会自增长,k会每轮都等于数组中的每一个数,
遍历数组元素,不是数组地址
for-each循环做不到修改数据,但是遍历数组很方便。
for(int k : data){
if( x==k){
found = true;
break;
}
}
if (found){
System.out.println(x+"在其中");
}else{
System.out.println(x+"不在其中");
}
判断素数
1.顺序遍历
Scanner in = new Scanner(System.in);
int x = in.nextInt();
boolean isPrime = true;
if( x==1 ){
isPrime = false;
}
for ( int i =2; i<x; i++){
if ( x% i ==0 ){
isPrime = false;
break;
}
}
if (isPrime){
System.out.println(x+"是素数");
}else {
System.out.println(x+"不是素数");
}
2.去掉偶数,从3 到x-1,每次加 2
Scanner in = new Scanner (System.in);
boolean isPrime = true;
int x = in.nextInt();
int i ;
if (x ==1 ||x%2==0&&x!=2){
System.out.println(x +"不是素数");
}else{
for(i = 3;i<x ;i=i+2){
if (x% i ==0){
isPrime = false;
break;
}
}
if(i==x){
System.out.println(x+"是素数");
}
else {
System.out.println(x+"不是素数");
}
}
3.无须到x-1,到sqrt(x) 就够了
for (int i =3;i<Math.sqrt(x);i+=2){
if( x% i ==0){
isPrime = false;
break;
}
}
4.判断是否能被已知的且<x 的素数整除,构造前50个素数的表。
这里的MAIN_LOOP需要注意一下。
int[] primes = new int[50];
primes[0] = 2;
int cnt =1;
MAIN_LOOP:
for(int x =3;cnt<50;x++){
for(int i =0;i<cnt;i++){
if(x %primes[i]==0){
continue MAIN_LOOP;
}
}
primes[cnt++] =x;
}
for(int k: primes){
System.out.println(k+" ");
}
System.out.println();
}
}
5.构造素数表
boolean[] isPrime = new boolean[100];
for( int i=2;i<isPrime.length;i++){
isPrime[i] = true;
}
for(int i =2;i<isPrime.length;i++){
if(isPrime[i]){
for( int k=2;i*k <isPrime.length;k++){
isPrime[i*k] = false;
}
}
}
for(int i=0 ;i<isPrime.length;i++){
if(isPrime[i]){
System.out.println(i+" ");
}
}
System.out.println();
}
}