『零基础学Java语言-浙江大学-翁恺』第3周 循环

以下为个人学习笔记和习题整理
课程:零基础学Java语言-浙江大学-翁恺 @ 中国大学MOOC
https://www.icourse163.org/course/ZJU-1001541001

课堂笔记

while 循环

while (<循环条件>)
{
	<循环体语句>;
}
  • 先判断条件是否满足,然后再执行循环体,直到条件不满足为止。
  • 可能一次也不执行。

do-while 循环

do {
	<循环体语句>;
} while(<循环条件>); // 句末分号不可丢
  • 进入时不检查,执行完一轮后,再检查条件是否满足,如果满足则继续执行循环体。
  • 至少执行一次。

例子

算平均数

Scanner in = new Scanner(System.in);
int number;
int count = 0;
int sum = 0;

number = in.nextInt();

while(number != -1)	{
	sum += number;
	count ++;
	number = in.nextInt();
}

if (count > 0) {
	System.out.println((double)(sum)/count);
}
Scanner in = new Scanner(System.in);
int number;
int count = 0;
int sum = 0;

do {
	number = in.nextInt();
	if(number != -1) {
		sum += number;
		count ++;	
	}
} while (number != -1);

if (count > 0) {
	System.out.println((double)(sum)/count);
}

猜数游戏

Scanner in = new Scanner(System.in);
int number = (int)(Math.random()*100+1);
// 每次召唤 Math.random() 就得到一个 [0,1) 范围内的随机数
// [0,1)-->[0,100)-->[1,100]

int count = 0;
int a;

do {
	a = in.nextInt();
	count ++;
	if(a > number) {
		System.out.println("猜大了");
	} else if(a < number) {
		System.out.println("猜小了");
	}
} while (a != number);

System.out.println("恭喜你猜对啦!你一共猜了"+count+"次。");
  • 为什么方法正确的话,100以内的数最多猜7次就够了?

二分法:
对于某个数使用二分法的最少次数的公式为 2 n > k 2^n>k 2n>k,其中n为最少次数,k为一共有多少数。
因为 2 7 2^7 27是128,大于100,可以判断100以内只需要7次。

小测验

  1. 以下哪种运算能从变量x中取得它的个位数?
    A. x/10
    B. x%10
    C. x*10
    D. x=10

    B

  2. while循环的条件满足的时候循环继续,而do-while的条件满足的时候循环就结束了。

    ×

  3. 以下代码片段执行结束后,变量i的值是多少?

    int i = 1;
    do {
        i = i+5} while (i<17);
    

    21

编程题

作业1. 奇偶个数(5分)

  • 题目内容
    你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
  • 输入格式
    一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
  • 输出格式
    两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
  • 输入样例
    9 3 4 2 5 7 -1
  • 输出样例
    4 2

解题代码

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		int number = in.nextInt(),
			odd = 0,
			even = 0;		
		
		while (number != -1) {
			if (number % 2 == 0)
			{
				even ++;
			}
			else
			{
				odd ++;
			}
			number = in.nextInt();
		}
		System.out.println(odd + " " + even);
	}

}

作业2. 数字特征值(5分)

  • 题目内容
    对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

    这里的计算可以用下面的表格来表示:

    数字342315
    数位654321
    数字
    数位
    奇偶一致001101
    二进制位值32168421

    按照二进制位值将1的位的位值加起来就得到了结果13。

    你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

    提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

  • 输入格式
    一个非负整数,整数的范围是[0,1000000]。

  • 输出格式
    一个整数,表示计算结果。

  • 输入样例
    342315

  • 输出样例
    13

解题代码

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		int number = in.nextInt(),
			digit, // 个位数存储
			binary = 1, // 二进制位值,第一个循环时为1			
			count = 1, // 循环次数
			result = 0; // 结果值
		
		do {
			digit = number % 10; // 计算当前循环的个位数
			
			if ( digit % 2 == count % 2)
			{ // 个位数与循环次数的奇偶一致
				result += binary; // 则追加相应二进制位值
			}
			
			// 以下计算出下一个循环需要的参数
			number /= 10; // 抹去已计算的个位数
			binary *= 2; // 二进制位值每次乘2
			count ++; // 循环次数加1
		} while (number > 0); // 循环条件
		
		System.out.println(result);
	}

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值