Java学习日记DAY4

1.循环语句

	public static void main(String[] args) {
		int balance=0;
		int need=0;
		while(true) {
			System.out.print("请投币:");
			Scanner in=new Scanner(System.in);
			int amount=in.nextInt();
			balance=balance+amount;
			if(balance>=10) {
				//打印车票
				System.out.println("***********************");
				System.out.println("*Java城际铁路专线*");
				System.out.println("*无指定座位票*");
				System.out.println("*票价10元*");
				System.out.println("***********************");
				//找零
				System.out.println("找零"+(balance-10));
				balance=0;
			}
			else {
				need=10-balance;
				System.out.println("还差"+need+"元");
			}
		}
	}

上面的程序是一个永动机,即永远不会停止除非有其他因素干预,那么如何让这个循环停止呢?比如说我们要数一个数的位数,比如234,用程序应该怎么做呢?看下面的代码。

public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		int amount=0;
		while(number>0) 
		{
		   number=number/10;
		   amount=amount+1;
		}
		System.out.println(amount);
	}

while 与 if是有关系的,可以说while拥有if的判断功能再加上循环。
那么问题又来了,上面这个程序输入0时,输出为0,显然是错误的。这是因为while语句是先判断再进入循环体,这时候就需要另外一个语句–do—while。

public class xunhuan1 {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		int amount=0;
		do
		{
		   number=number/10;
		   amount=amount+1;
		}while(number>0);
		System.out.println(amount);
	}

在这里插入图片描述
2.计数循环
求平均值(两种方法)

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		System.out.println("请输入要求平均数的数字,输入-1结束:");
//		int number=in.nextInt();
		int count=0;
		int sum=0;
		int number;
//		while(number!=-1) {
//			sum=sum+number;
//			count+=1;
//			number=in.nextInt();
//		}
		do {
			number=in.nextInt();
			if(number!=-1) {
				sum=sum+number;
				count+=1;
			}
			
		}while(number!=-1);
		if(count>0) {
			System.out.println("平均值为:"+(double)sum/count);
		}
	}

DAY5.续上一天
3.猜数字游戏

public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=(int)(Math.random()*100+1);
//		生成一个1~100的随机数
		int amount=0;
		int a;
		do {
			a=in.nextInt();
			amount=amount+1;
			if(a>number) {
				System.out.println("偏大");
			}
			else if(a<number) {
				System.out.println("偏小");
			}
		}while(a!=number);
		System.out.println("恭喜您猜对了,您一共猜了"+amount+"次");
	}

本段代码学到了如何生成随机数Math.random生成的是大于等于0小于1的随机数,通过调整得到程序中注释的结果。
4.如何将352倒着写成253

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		do
		{
			int digit=number%10;
			System.out.print(digit);
			number=number/10;
			
		}while(number>0);
	}

有一个问题,如果只是倒序还好,700变为007;但是如果是700要求倒过来变成7要怎么做呢?

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		int amount=0;
		do
		{
			int digit=number%10;
			System.out.print(digit);
			amount=amount*10+digit;
			number=number/10;
			
		}while(number>0);
		System.out.println();
		System.out.println(amount);
	}

只需引入新变量amount,做*10+digit运算即可。
5.for循环
如何求10的阶乘,两种方法

	public static void main(String[]args){
		int factor=1;
//		int i=1;
//		while(i<=10) {
//			factor=factor*i;
//			i=i+1;
//		}
		for(int i=1;i<=10;i++) {
			factor=factor*i;
		}
		System.out.println(factor);
	}

注意:三中循环的用法
①如果有固定次数,用for
②如果必须执行一次用do_while
③其他情况用while
6.循环控制
判断一个数是否为素数

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();
		int isPrim=1;
		for(int i=2;i<number;i++) {
			if(number%i==0) {
				System.out.println(number+"不是素数,i="+i);
				isPrim=0;
				break;
			}
		}
		if(isPrim==1) {
			System.out.println(number+"是素数");
		}
		else {
			System.out.println(number+"不是素数");
			
		}
	}

注意代码中的break,当输入14时输出为:
14不是素数,i=2
14不是素数。
与break对应的还有continue,continue的作用为跳出本次循环开启下一次循环。
7.多重循环
1)寻找100以内的素数

	public static void main(String[] args) {
//		Scanner in=new Scanner(System.in);
//		int number=in.nextInt();
		for(int number=2;number<=100;number++) {
			int isPrim=1;
			for(int i=2;i<number;i++) {
				if(number%i==0) {
//					System.out.println(number+"不是素数,i="+i);
					isPrim=0;
					break;
				}
			}
			if(isPrim==1) {
				System.out.print(number+" ");
			}
			else {
//				System.out.println(number+"不是素数");
				
			}
		}
	}

2)前50个素数

	public static void main(String[] args) {
//		Scanner in=new Scanner(System.in);
//		int number=in.nextInt();
		int a=0;
		for(int number=1;;number++) {
			int isPrim=1;
			for(int i=2;i<number;i++) {
				if(number%i==0) {
//					System.out.println(number+"不是素数,i="+i);
					isPrim=0;
					break;
				}
			}
			if(isPrim==1) {
				System.out.print(number+" ");
				a++;
				if(a==50) {
					break;
				}
			}
			else {
//				System.out.println(number+"不是素数");
				
			}
		}
	}

3)多重循环的跳出
用1角2角5角凑10元,只需要一种方即可,穷举。

	public static void main(String[] args) {
		OUT:
		for(int a=0;a<=100/1;a++) {
			for(int b=0;b<=100/2;b++) {
				for(int c=0;c<=100/5;c++) {
					if(a*1+b*2+c*3==100) {
						System.out.println("需要"+a+"张1角,"+b+"两角,"+c+"五角");
						break OUT;
					}
				}
			}
		}
	}

注意OUT是自己定义的循环标题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值