易错的for循环笔试题(续)

来源:互联网 发布:百雀羚淘宝哪家是真品 编辑:程序博客网 时间:2024/04/29 15:22

在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循环很强大。


 

原创粉丝点击