刚开始用运算符时,最容易出错的情况
1.例如 A=B&&C&&D ;
如果B为flase,则C,D则不执行,A的值直接为flase;
如果B为true,C为flase,则D就不执行;
2.例如 A=B||C||D;
如果B的值为true,C,D则不执行,A的值为true;
如果B为flase,C为true,则D就不执行;
循环语句
1.switch语句
格式:
switch(表达式){
case 取值1: 执行语句; break;
case 取值2: 执行语句; break;
……
default: 执行语句; break;
}
特点:
- switch(n)中 n不可以是 long类型,float类型,double类型;
- case之间与default没有顺序。先判断所有的case,没有匹配的case执行default;
- 如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束;
- switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
备注:String 在jdk1.7之后才可以使用
1.for语句
用于数组的foreach与for用法的差别:
int[] array = {1,2,3,4,5};
for(int i = 0;i < array.length;i++) {
System.out.println(array[i]);
}
for(int a : array) {
System.out.println(a);
}
上面写的和下面的foreach语法写的结果是一样的;
foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
四个例题
1、求斐波那契数列的前40项的和???
public static int fibonac(int n) {
if(n==1||n==2) { //第一项和第二项不满足公式,所以要单独写,并且结果为1;
return 1;
} else{
return fibonac(n-1)+fibonac(n-2); //从第三项开始满足公式f(n)=f(n-1)+f(n-2);
}
}
2.用for循环产生20个随机数(10~20);
public static void ranNumber(int a,int b) {
double m=0;
for(int i=0;i<20;i++) { //用一个循环20次,产生20个数
m=Math.random()*(b-a)+a; //math.random产生[0,1)的随机数 *(b-a)+a,即产生[a,b)的随机数;
System.out.println(m);
}
}
3.输入一个数,求他是几位数,并顺序输出,逆序输出
public static void length(int n) {
int count = 0,b=0,c=n;
double m=0;
System.out.print("逆序输出为:");
while (n % 10 > 0 || n / 10 != 0) { //n%10>0则保证循环从每次能去掉一位数,最后统计循环次数即为数字位数
count++; //而 n/10!=0 则保证输入的数字如果为10的倍数,则能正常循环下去
System.out.print(n % 10 + " "); // 每次循环的n%10的值,即为从最低位到最高位的数字
n = n / 10; //减少一位继续循环;
}
System.out.println();
System.out.print("顺序输出为:");
for(int i=count;i>0;i--) { //上面已判断出数字位数,所以循环执行位数次;
m= Math.pow(10,i-1); // 执行结果为10的(i-1)次方,且为double值
int a=(int )m; //将double值强转成int值;
b=c/a; //循环开始依次从最高位开始取值;
System.out.print(b+" ");
c=c-b*a; //去掉最高位,然后继续循环;
}
System.out.println();
System.out.println("总个数为:"+count);
}
4.求一个数字的二进制数有几个1;
public static int binary(int n) {
int count=0;
while(n!=0){ //循环条件为:int n的值不为0
if(n%2==1) { //因为二进制数模2的余数及就为他右移一位时”掉的“那个数(只有0或1),
count++; //如果余数为1,则这个数中1的个数+1;
}
n=n/2; //右移一位操作(因为上面模二已经把最后一位判断了,所以右移一位继续执行循环)
}
return count;
}