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 函数的重载
在同一类中 如有同名函数,则称之为函数之间为重载关系
重载的前提是函数重名 与修饰符、返回值类型、参数列表没有关系。仅仅和参数列表中参数的个数和类型有关。