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

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


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值