在csdn看到的一道让我出错的for循环面试题
for (int i = 1; i <= 99; i+=i%2+1)
System.out.println(i+=i--);
我修改成C#中运行:
for (int i = 1; i <= 99; i += i % 2 + 1)
{
i = i + i--;
Console.WriteLine(i);
}
Console.ReadKey();
看到原始javas的for循环后一眼间没看懂,在vs2010调试之后才看到了答案。
断点调试看到了for循环走势,才知道原来我之前对的for循环理解有误
这时把鼠标移到断点走到的i处看到i的值为0,
已经赋了值i=1
跳过了i+=i%2+1,进入到循环;
还没赋值前三个i的值都为1;
赋值后i=2;这里的i--是误导面试者的,i--是先赋值再减1,但上题中下面没有i赋值了,--也就没起到作用,在这题中相当于i=i+i;
继续调试跳到
即i=2+2%2+1=3,3<99;继续循环,后面类似。。。
下一题:
int k=6,i=10,j=10;
k*=i+++j;
Console.WriteLine(k);
Console.ReadKey();
我答的是:126.运行下才知道我错了,+++等效于+,所以k*=i+j;
有一个数列:8,4,2,1,23,344,12
1)循环输出数列的值
2)求数列中所有数值的和
3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
int[] a={8,4,2,1,23,344,12};
int sum=0;
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
sum+=a[i];
}
System.out.println();//换行
System.out.println("数列中所有数值的和:"+sum);
System.out.println("请任意输入一个数字:");
Scanner s=new Scanner(System.in);
int b=s.nextInt();
//用循环来判断判断数列中是否包含此数
for(int c:a){
if(b==c){
System.out.println("数列中包含此数"+b);
}
}
此题开始困扰我的是第三问我最先想到的是用==或equels,试了下发现在数组中不行,后面查了下资料,思想是先用for循环遍历数组,在把输入的数字与遍历的数字比较是否==
从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分
int[] score=new int[5];
System.out.println("请输入五位同学的成绩:");
Scanner s=new Scanner(System.in);
//从键盘输入本次Java考试五位学生的成绩,用for循环实现
for(int j=0;j<5;j++){
score[j]=s.nextInt();
}
int max=score[0];
for(int i=1;i<5;i++){
if(score[i]>max){
max=score[i];
}
}
System.out.println("最高分是:"+max);
此题困扰我的是从键盘输入数组,刚开始一直没想到该怎么输入,查了资料才知道也是用for循环,先遍历再用数组单个输入。看来for循环很强大。