JavaDay_04

JavaDay_04

知识框架

  • Math.Random的用法
  • while循环
  • for循环
  • 循环嵌套
  • 函数(方法)

4.1 Math.Random的用法

Math类中的random()方法,调用这个方法会返回一个双精度的随机值d,d满足0.0<=d<1.0。这样,(int)(Math.random()*10)会返回一位随机的整数,即0~9之间的数。
产生[5,15)之间的随机整数:(int)(5+(Math.random()*10)
产生[11,89]之间的随机整数:(int)((11+(Math.random()*79))
如何产生[a,b)之间的随机整数:(int)(a+(Math.random()*b-a))
如何产生[a,b]之间的随机整数:(int)(a+(Math.random()*b-a+1))
模拟魔术牌:从52张牌中选择一张牌,程序显示牌的大小和花色

//模拟魔术牌
public class Demo3_14 {
   public static void main(String[] args){
   	//[1,13]一共13张牌
   	int number=(int)(1+Math.random()*13);
   	//[1,4]共4中花色
   	int colour=(int)(1+Math.random()*4);
   	//colour=number%4;
   	switch(number){
   	case 1:
   		System.out.print("The card you picked is Ace");
   		break;
   	case 2:
   		System.out.print("The card you picked is 2");
   		break;
   	case 3:
   		System.out.print("The card you picked is 3");
   		break;
   	case 4:
   		System.out.print("The card you picked is 4");
   		break;
   	case 5:
   		System.out.print("The card you picked is 5");
   		break;
   	case 6:
   		System.out.print("The card you picked is 6");
   		break;
   	case 7:
   		System.out.print("The card you picked is 7");
   		break;
   	case 8:
   		System.out.print("The card you picked is 8");
   		break;
   	case 9:
   		System.out.print("The card you picked is 9");
   		break;
   	case 10:
   		System.out.print("The card you picked is 10");
   		break;
   	case 11:
   		System.out.print("The card you picked is Jack");
   		break;
   	case 12:
   		System.out.print("The card you picked is Queen");
   		break;
   	case 13:
   		System.out.print("The card you picked is King");
   		break;
   	}
   	switch(colour){
   	case 1:
   		System.out.print(" of clubs");
   		break;
   	case 2:
   		System.out.print(" of Diamonds");
   		break;
   	case 3:
   		System.out.print(" of Hearts");
   		break;
   	case 4:
   		System.out.print(" of Spades");
   		break;
   	}		
   }
}

4.2 while循环

while循环适用于循环结束条件已知,但循环次数未知的情况,
4.2.1while()循环
while 循环的语法如下 :
while( 循环继续条件) {
循环体 ;
}
重复执行的语句部分叫循环体。循环体的每一次执行都被认为是一次循环的迭代(或重复),每个循环都含有循环继续条件,循环继续条件是一个布尔表达式,控制循环体的执行。在循环体执行前总是先计算循环条件以决定是否执行它。若条件为 true, 则执行循环体;若条件为 false,则终 止整个循环,并且程序控制转移到 while 循环后的下一条语句。

猜数游戏:电脑随机生成一个数,玩家一直猜测该数,直到猜中。

import java.util.Scanner;
//猜数字
public class Test4_1 {
	public static void main(String[] args) {
		//0.生成一个随机数
		int number=(int) (Math.random()*101);
		System.out.println("Guess a magic number between 0 and 100");
		Scanner scanner=new Scanner(System.in);
		//1.获取用户的输入值
		//循环初始化
		System.out.print("Enter your guess:");
		int num=scanner.nextInt();
		while(num!=number){//循环继续条件
			if(num<number){
				System.out.println("too low");
			}else{
				System.out.println("too high");
			}
			//循环间距
			System.out.print("Enter your guess:");
			num=scanner.nextInt();//更新num的值
		}
		System.out.println("Yes the number is "+number);
	}
}

while(循环继续条件){
需要被循环执行的代码//循环体
}
循环初始化->循环继续条件->循环体->循环间距,即:

循环初始化
while(循环继续条件){
循环体
循环间距
}
4.2.2while(true)循环
是一个死循环,必须有结束条件,格式为:
while(true){
循环体
循环间距
if(循环结束条件){
break;
}
}
猜数游戏:电脑随机生成一个数,玩家一直猜测该数,直到猜中。

import java.util.Scanner;
//猜数字游戏,没有初始化
public class Test4_2 {
	public static void main(String[] args){
		Scanner sc =new Scanner(System.in);
		System.out.println("Guess a magic number betwween 0 and 100");
		int number=(int)(Math.random()*101);
		//int num=0;(也可以放在此处定义)
		while(true){
			System.out.print("Enter your guess:");
			int num=sc.nextInt();
			if(num<number){
				System.out.println("too low");
			}else if(num>number){
				System.out.println("too high");	
			}else{
				System.out.println("Yes the number is "+number);
				break;
			}
		}	
	}
}

4.2.3 do-while
do-while 循环和 while 循环基本一样,不同的是**它先执行循环体一次,**然后判断循环继续条件。
do-while 循环是 while 循环的变体。它的语法如下:
do{
// 循环体; 语句(组);
} while ( 循环继续条件);
首先执行循环体,然后计算循环继续条件。如果计算结果为 true, 则重复执行循环体;如果为 false, 则终止 do-while 循环。while 循环与 do-while 循环的差别在于:计算循环继续条件和执行循环体的先后顺序不同。
猜数游戏:电脑随机生成一个数,玩家一直猜测该数,直到猜中。

import java.util.Scanner;
//猜数字游戏,用do...while
public class Test4_3 {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int number=(int)(Math.random()*101);
		int num=0;
		do{
			System.out.print("Enter a guess:");
			num=sc.nextInt();
			if(num<number){
				System.out.println("too low");
			}else if(num>number){
				System.out.println("too high");
			}
		}while(num!=number);
		System.out.println("Yes the numbert is "+number);
	}
}

三个循环的流程图:
在这里插入图片描述

4.3 for循环

for循环的语法如下所示:
for (初始操作;循环继续条件;每次迭代后的操作){
// 循环体; 语句(组);
}
for循环从关键字for开始,然后是用双括号括住的循环控制结构体。这个结构体包括初始动作、循环继续条件,和每次迭代后的动作。控制结构体后紧跟着花括号括起来的循环体。初始动作、循环继续、条件和每次迭代后动作都要用分好分隔。即:
for( 循环初始化 ; 循环继续条件 ; 循环间距){
循环体
}
一般情况下,for 循环使用一个变量来控制循环体的执行次数,以及什么时候循环终止。 这个变量称为控制变量(control variable)。初始化动作是指初始化控制变量,每次迭代后的动作通常会对控制变量做自增或自减,而循环继续条件检验控制变量是否达到终止值。例如:用for循环打印Welcome come to Java!100次:

for(int i=0;i<100;i++){
		System.out.println("Welcome to Java!");
	}

for循环控制变量i初始化为0,当i小于100时,重复执行println语句并计算i++。初始化动作i=0初始化控制变量i。循环继续条件i<100是一个布尔表达式。这个表达式在初始化之后和每次迭代开始之前都要计算一次。如果这个条件为true,则执行该循环体。如果它为false,则终止循环,并且将程序控制转移到循环后的下一行。每次迭代后的i++是一个调整控制变量的语句。每次迭代结束后执行这条语句。它自增控制变量的值。最终,控制变量循环的值应该使循环继续条件变为false,否则循环将成为死循环。
注意:控制变量必须在循环控制结构体内或循环前说明。如果在循环控制结构体内声明变量,那么在循环外不能引用它
for循环中的初始动作可以是0个或多个以逗号隔开的变量声明语句或赋值表达式。如:

for(int i=0,j=0;i+j<10;i++,j++){
	//Do something
}

甚至如果省略for循环中的循环继续条件,则隐含的认为循环条件为true即:

for( ; ; ;){
	//Do something
}
for(; true; ){
	//Do something
}
while(true){
	//Do something
}

这三个语句等价,都是无限循环。

无论是for循环还是while循环在表达式上是等价的,while适合于循环结束条件已知但是循环次数未知的情况,for 适合于循环次数已知的情况for和while之间是可以完全互换的。

4.4 循环嵌套

一个循环可以嵌套在另一个循环中。嵌套循环是由一个外层循环和一个或多个内层循环组成的。每当重复执行一次外层循环时将再次进入内层循环,然后重新开始。
打印9*9的乘法表

package myself;
//打印9X9的乘法表
public class Chengfabiao {
	public static void main(String[] args) {
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				System.out.print(i+"x"+j+"="+i*j+"\t");	
			}
			System.out.println();
		}	
	}
}

嵌套循环运行的时间较长,程序的时间复杂度较高。
典型示例:显示素数,分5行显示前50的素数,每行包含10个。

public class Test4_7 {
	public static void main(String[] args) {
		int count=0;//记录素数的个数
		int number=2;
		while(count<=50){//
			//计算素数
			boolean flag=true;
			for(int i=2;i<=number/2;i++){
				if(number%i==0){
					flag=false;
					break;
				}
			}
			if(flag){
				count++;
				System.out.print(number+" ");
				if(count%10==0){
					System.out.println();
				}
			}
			number++;
		}
	}
}

4.5 函数(方法)

4.5.1 方法的含义及组成
方法:也叫函数,指一段具有独立功能的代码片段。程序中会有重复代码出现,即代码冗余,为了避免这种情况,采用函数,也叫方法。方法是为完成一个操作而组合在一起的语句组。
方法的定义由方法名、参数、返回类型以及方法体组成,语法格式如下:
修饰符 返回值类型 函数名(参数列表){
函数体
}
修饰符:访问权限
返回值类型:如果需要返回的数据值int ,则返回值类型int;如果不需要返回数据 ,返回值类型为void
函数名:就是对这一片段进行起名
return:仅仅代表结束当前函数,如果有返回值,则在函数结束时将数据进行返回。
参数列表:函数需要用到的一些数据,可以给可以不给。
方法可以返回一个值,有些方法只是完成 某些要求的操作,而不返回值。如果方法有返回值,则称为带返回值的方法(value-returning method), 否则就称这个该方法为 void 方法(void method)。
定义在方法头中的变量称为形式参教(formal parameter),简称为形参(parameter)。当调用方法时,就给参数传递一个值,这个值称为实际参数(actual parameter)或实参(argument)。 参数列表(parameter list)指明方法中参数的类型、顺序和个数。方法名和参数列表一起构成方法签名(method signature)。参数是可选的,也就是说, 方法可以不包含参数。
4.5.2 函数的重载
在同一类中 如有同名函数,则称之为函数之间为重载关系
重载的前提是函数重名 与修饰符、返回值类型、参数列表没有关系。仅仅和参数列表中参数的个数和类型有关。

猜你喜欢

转载自blog.csdn.net/weixin_43283092/article/details/83001397
今日推荐