Java Fundamental day04

来源:互联网 发布:mac 风暴英雄 鼠标 编辑:程序博客网 时间:2024/06/16 01:30
知识点:
一、循环语句:反复执行一段相同或相似的代码
1.循环三要素:
  1)循环变量的初始化
  2)循环的条件(以循环变量为基础)
  3)循环变量的改变(向着循环的结束变)
  循环变量:在循环过程中所改变的那个量 


2.循环结构:
  1)while:先判断后执行,有可能一次都不执行。“当...循环”
  2)do...while:先执行后判断,至少会执行一次
               第1要素与第3要素相同时,首选。“直到...循环”如验证密码直到正确。
  3)for:应用率最高的,固定次数循环


3.嵌套循环:
  1)循环中套循环,一般多行多列时使用,
    外层控制行,内层控制列
  2)执行过程:外层循环走一次,内层循环走所有次
  3)建议:嵌套层次越少越好,能用一层就不用两层,
    若业务必须通过三层以上的循环才能解决,说明设计有问题
  4)break:跳出循环,只能跳出一层循环。
    continue:跳过循环体剩余语句而进入下一次循环.如统计总和时跳过所有个位为3的。


4.死循环:while(true)/for(;;)


练习:
1)完成while版的猜数字小游戏:游戏规则为:程序内置一个 1 到 1000 之间的数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。


2)完成do...while版的猜数字小游戏


3)完成for版的随机加法运算器:需要使用 for 循环随机产生 10 道加法题目。如果用户录入的为-1,则需要提前退出循环;如果用户录入的答案错误,则提示“Error!”,并继续下一次答题;如果用户录入的答案正确,则提示“Correct!”,继续下一次答题。
循环结束后,计算用户的得分并输出,程序结束。注:用户得分的规则是,每答对一道题,得10分,满分为100分。


HomeWork:

1. 请描述while/for语句的执行流程
while(boolean表达式){//1.boolean表达式里的循环变量要先初始化。2.boolean表达式为循环的条件。
         语句块//       3.循环的内容。 //4.循环变量的改变,如不改变则死循环。
                }
先判断循环条件是否为true,当为true时开始执行while内{语句块},依次执行,直到循环条件为false,跳出循环。
 
                 for(表达式一;表达式二boolean;表达式三){语句块}
先计算表达式一的值,判断表达式二为true时,执行其括号内的语句块,为一次循环,只接计算表达式三的值后判断表达式二为true时继续执行语句块,再计算表达式三直到判断表达式二为false后,跳出循环。




2. 指出下列程序运行后的情况
int count = 0;
while (count < 5)
;
{
System.out.print(count + " ");
count++;
                 }




// 3.数列求和,系统随机数列1/1+1/2+...+1/num。
Scanner sc = new Scanner(System.in);
int num = (int)Math.random()*10;// 系统随机给一个0到9的数
System.out.println("系统随机数为:" + num);
double result = 0;
for (int i = 1; i < num; i++) {


if (i == 1) {
System.out.print("1+");
} else {
System.out.print("1/" + i + "+");// 由于这种排列方式,只能将最后一次运算放后面
}


}
result += 1.0 / num;//将最后一次运算放后面
System.out.print("1/" + num + "=" + result);

//用数组:
double[] de=new double[num];
String Str="";
double R=0;
for(int i=1;i<=de.length;i++){
de[i-1]=1/i;
R+=de[i-1];
if(de.length==1){
Str+="1/"+i;
break;
}
if(i==de.length){
Str+="1/"+i;
}else{
Str+="1/"+i+"+";
}
}
System.out.print("\n"+Str+"=" + R);

//4./**将数列模式设定为输入n个数,(n1*n1)+(n2*n2)+(n3*n3)+...+(n*n)*/
System.out.print("Please input the numbers:");
String ns=sc.next();
int [] arr=new int[ns.length()];
int sum=0;
String str="";//利用字符串拼接
for(int i=0;i<arr.length;i++){
char ch=ns.charAt(i);
//arr[i]=Integer.parseInt(String.valueOf(ch));
arr[i]=ch-'0';
sum+=arr[i]*arr[i];//仅仅是算式结果用到,如果没写好算式会重新覆盖掉。

if(arr.length==1){
str+=arr[i]+"*"+arr[i];
break;
}
if(i==arr.length-1){
str+=arr[i]+"*"+arr[i];
}else{
str+=arr[i]+"*"+arr[i]+"+";

}
System.out.print(str+"="+sum);



// 5.系统随机给题,从控制输入答案
int score=0;
int s=0;
for(int i=1;i<=10;i++){
int a=(int)(Math.random()*100);//注意括号
int b=(int)(Math.random()*100);
s=a+b;
System.out.println("请计算"+a+"+"+b+"=:");
System.out.println("请输入计算结果:");
int Rt=sc.nextInt();
if(Rt!=s){
System.out.println("计算错误");
}else{
System.out.println("计算正确");
score+=10;
}
}
  System.out.println("总成绩为:"+score);
        

 //6.猜字游戏,要求用while和do-while
  int guess=(int)(Math.random()*100+1);
  int g=0;
  while(g!=guess){
  System.out.println("guess:");
  g=sc.nextInt();
  if(g==0){
  break;
  }else if(g>guess){
  System.out.println("bigger!");
  }else {
  System.out.println("smaller!");
  }
  }
  if(g==0){
  System.out.println("quit!");
  }else{
  System.out.println("right!");
  }

//方法二
  do{
  System.out.println("guess:");
  g=sc.nextInt();
  if(g==-1||g==guess){//先执行再判断
  break;
  }else if(g>guess){
  System.out.println("bigger!");
  }else {
  System.out.println("smaller!");
  }
  
  }while(g!=guess);
  if(g==-1){
  System.out.println("quit!");
  }else{
  System.out.println("right!");
  }


拓展用for循环完成它。



// 7.密码设置验证程序,以后可改成每天有五次机会。
Scanner sc = new Scanner(System.in);

System.out.println("请输入您想输入的整数,给程序保存作为密码验证:");
int password = sc.nextInt();
int count=5;
for(int i=0;i<count;i++){

   System.out.println("请输入密码验证,放弃按0:");
int num = sc.nextInt();
if(num == 0){
System.out.println("您主动结束此次验证,谢谢使用");
break;
}else if (num == password) {
System.out.println("验证正确");
break;
}else {
count--;
System.out.println("密码错误,您还有"+count+"次机会");

}



//8.9*9multiplication table,先打最底下那行,再控制每行。

               int row = 1, column, sum;// 定义行row,列column。

                for (row = 1; row <= 9; row++) {
for (column = 1; column <= row; column++) {// 先用笔写出9*9的图,然后可见列上的数<=行。
sum = row * column;
System.out.print(column + "*" + row + "=" + sum + "\t");// 先打出每行个数
}
System.out.println();// 当循环每行后,加个换行的空白。
}

//while方法:


        while (row <= 9) {
column = 1;//作用范围,在row的循环下,column依然要每次循环,所以每次初始化。,而for语句里每次都初始化了。
while (column <= row) {
sum = row * column;
System.out.print(column + "*" + row + "=" + sum + "\t");
column++;
}
System.out.println();
row++;
}


//9.//打印金字塔pyramid,并思考以金字塔为整体再进行图形打印,以及其他图形如圆的打印。

       int high=7;//可定义任意值
for(row=1;row<=high;row++){
int space=high-row;//空格数,空格的ascii码为32
for(space=0;space<high-row;space++){//空格数和每行@是一起的,所以与每行的列数column@的循环并列。只受行数限制。
System.out.print(" ");
}

for(column = 1;column <= 2*row-1;column++){//固定行高high为7=row,而从图形上每行的列数column<=2*row-1

System.out.print("@");//输出最后一行的符号数量为2*row-1
}
System.out.println();
}

//用while循环方法再实现一遍,要完全掌握三大循环。

0 0
原创粉丝点击