`

JAVA基本功<6>

 
阅读更多

一.
1. 循环结构
1. while 语句格式:                   循环语句的好处:可以让指定语句执行很多次。
    while(条件表达式)                  对于while,它和if有点相似,但是if只对条件判断一次
{                                      while可以对条件判断多次。
执行语句;
}

2.do  while 语句格式:                注意: 无论循环条件是否满足,循环体至少执行一次。
          do                               这种循环相对少用。
{
  执行语句;
}while(条件表达式);

注意:定义循环时,一定要明确,哪些语句需要参与循环,哪些不需要。
我做的练习:
练习:
1,求出1~10十个数的和。(main方法,和类,在此省略了)
int a = 1,sum = 0;
while(a<=10){
sum = sum + a;
a++;
}
System.out.println(sum+"");//这个其实就是编程中最基本的一个小思想:累加思想。

2,获取1~100之间6的倍数的个数。
int a = 1,sum = 0;
while(a<100){
if(a%6==0){
sum ++;
}
a++;
}
System.out.println(sum+"");//这就是一个最基本的思想:计数器思想。记录住符合某一条件的次数。

3.for循环语句格式
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;(循环体)
}
通过练习发现,while和for几乎一样。

但它们有什么区别呢?
其实while和for是可以互换的。
int x = 0;
while(x<3)
{
System.out.println("x="+x);
x++;
}
System.out.println("x....."+x);

for(int a=0; a<3; a++)
{
System.out.println("a="+a);
}
System.out.println("a......"+a);//注意,for循环结束后,a变量。已经消失了。所以这句代码是编译失败的。

如果定义变量的目的只为循环的增量存在。
只为控制循环的次数。那么最好使用for语句。将该变量定义在for循环中。
如果定义的变量被循环操作后,还需要继续被使用。可以使用while循环。


for 循环的顺序:
            首先执行第一个表达式,之后到第二个循环表达式,之后到循环体,再到第三个自增或者是自减的表达式,之后执行刚才的第二个表达式,之后循环体,之后第三个表达式,以后就以此类推,直到循环结束。(初始化表达式只执行一次)
注意:当循环结束时,x就在内存中消失了,专业术语叫做“被释放”,因为x变量的作用范围结束了。
     for 语句的其它表现形式:
            for(;;){}//这就是传说中for的最简单的无限循环形式。条件表达式不写,默认就是true。
while(true){}//这是while语句最简单的无限循环形式。
格式注意事项:
for(int x=0; x<3; x++);//注意加上分号结束,编译可以通过,但是下面的代码块已经不再是循环体了。
{}
int y = 0;
while(y<3);//注意;不要加分号,因为该循环无限了。
{}
而且 for里面也可以定义多个变量,后面也可以有多个加加,或者减减。

下面这个挺好玩,以前没见过:
      int x = 0;
     for(System.out.println(“a”); x < 2; System.out.println(“c”)){
         Syetem.out.println(“b”);
}//结果是 a b c b c  注意:for里面写的表达式,不一定非得是那些 (如:int x=1;x<2;x++)形式

练习:需求:
3000米长的绳子,每天减其一半。问,需要多少天,绳子的长度会小于5米?
注意:不考虑小数。只考虑整数。
思路:
1,能减一半,我就记一天,所以有一个计数器。
2,减一半的动作和计数的都在运行多次,所以需要循环完成。
3,我们是对绳子操作,3000就是初始化值。 条件是只要大于等于5米,都可以对其进行减一半操作。
(省略了main和class)
int day = 0;
for(int x = 3000; x >= 5; x = x/2) {     //也可以 for(int x = 3000; x >= 5; day++){
  day ++ ;                                          x = x/2; 
} System.out.println(day + “天”);                }

4.for循环嵌套
两个for循环嵌套在了一起,那么它们是怎么执行的呢??
其实执行的顺序和一个循环的差不多,首先从外循环开始,外循环的第一个表达式,到外循环的第二个表达式,之后转到内循环的第一个表达式,之后内循环的第二个表达式,之后是内循环的循环体,之后内循环的第三个表达式,当内循环结束时,跳向外循环的第3个表达式,之后的顺序和一个循环的的时候一样。


我做的小例子:
1. 用*打印出一个矩形。
   for(int x = 1; x <= 5; x++){
for(int y = 1; y <=5; y++){
System.out.print("*");
}
System.out.println();}//此行没有输出作用,它在此的作用就是换行。
运行结果: *****
*****
*****
*****
*****

2. 用*打印出尖朝下的三角形,和尖朝上的三角形
   for(int x = 1; x<=5; x++){
for(int y = x; y<=5; y++){
System.out.print("*");
}
System.out.println();
}   注意:尖朝下的三角形,只需让初始的y等于x即可。
运行结果: *****
****
***
**
*

其实也可以定义一个变量z,因为y代表列数,它是变化的,它也就可以等于z
for(int x=1; x<=5; x++){
for(int y=1; y<=x; y++){
System.out.print("*");
}
System.out.println();
}  注意:尖朝上的三角形,只需让循环条件的y等于x即可。
运行结果: *
**
***
****
*****


3. 转义字符

   转义字符。就是对某些字符进行含义的转变。通过 \ 来完成。
用 \ 来转义它后面那个字符的含义。

常见的转义字符:
\t:表示tab键。制表符。
\b:表示退格键。backspace
\r:表示按下回车键。
\n:表示换行。

对于特殊符号,如果想要仅使用该符号,而不需要该符号的含义,也许要被转义。比如  \"

注意:不同的操作系统,对换行符的定义是不一样的。对windows系统而言,换行符是由两个字符组成 \r\n.
对于linux而言:换行符就是 \n.

4. break 和 continue
1. break:跳出。
该语句有自己作用的范围。离开这个范围该语句的存在是没有意义,是编译失败的。

作用的语句:
1,switch语句。     2,循环结构。

如果break语句单独存在,下面不可以定义其他语句。因为执行不到。编译会失败。
注意:如果出现嵌套循环,break定义在内循环中。记住一点,break默认只作用于当前所在的循环。
如果想要break跳出外循环呢?(面试题)
这时就需要给循环定义名称,就是所谓的标号。
如:   haha:for(int x=0; x<4; x++)
{
for(int y=0; y<5; y++)
{
System.out.println("x="+x);
break haha;
}
}
一般不这样使用,只有面试的时候或许会用到。

2. continue语句:
continue:继续。
作用的语句:循环语句。
注意:continue语句单独存在时,下面不可以有其他语句,因为执行不到。
continue默认作用于当前循环。
想要作用于嵌套的其他循环。可以定义标号。

continue:结束本次循环,继续下次循环。
hehe:for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.println("x="+x);
continue hehe;
}
}//输出结果0 1 2。


二. 函数(重点)
  1. 函数:就是程序中一段独立的代码,用于定义一个特定的功能。函数也叫方法
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)
{
执行语句;
return 返回值;
}  返回值类型就是这个功能运算后的结果的数据类型。
注意写法:
函数定义在类中。
不要将函数定义在函数中。
函数中只能调用函数。

参数列表和返回值类型没有直接联系。
public static int add(int a,int b)//a b 叫做形式参数。用于接收实际参数。
{
return a+b;//return将结果返回给了谁呢?谁在调用add方法,这个结果就返回给谁。
}
使用函数,可以提高代码的复用性。

2. 函数没有具体反回结果的情况:
  注意:返回类类型就是 返回值的对应的数据类型。
如果一个函数没有具体的返回值,那么返回类型,用一个特殊的关键字表示 void.
特殊之处:
当函数的返回值类型是void时,函数内的return语句可以省略不写。写上也不算错。
不写,系统会帮你加上。
当时如果有具体的返回值时,必须写return语句。


记住:以后写程序,不要将代码都定义在主函数中。
而是都封装成一个一个的函数。
而主函数只用来调用定义好的函数功能,用来测试这个功能是否可用。
3. public static void add2(int a,int b)
{
System.out.println(a+b);
//直接打印,没有返回值 ;
}
注意:
定义功能时,只要注重功能的具体实现即可。
至于这个功能的结果,该如何去操作,那不是这个功能需要做的事情。
应该只实现功能本身,将结果返回给调用者,由调用者来决定,这个结果该如何处理,
是要打印啊,还是要判断,还是要参与其他运算啊。

4. 方法的重载(overLoad)
    注意:在定义函数是,函数名很重要,函数名通常是根据函数的功能而起的名字,
要尽量的有意义。尽量通过函数名来体现函数的功能。

可是函数中有可能出现功能相同的函数。
这时不要定义多余名字,都用同一个名称即可。因为他们的功能是相同的。
怎么区分呢?它们不同的地方在于,实在该功能的过程中,参与运算的未知内容不同,要么个数不同,要么类型不同。
就可以存在于同一个类中。
注意:函数的重载只看参数列表。和返回类型无关。

三.总结:
由于昨天没做总结,今天我又把个别的视频回看了一下,加深了一下印象,感觉有点浪费时间了。以后我争取每天都坚持写完再休息。昨天敲了部分代码,还有一些练习没有完成,今天的主要任务就是敲代码,以及把三天的知识都过一遍。


   问题清单:
1. 师傅,我们老师说了,函数是为了完成一个特定的功能,它只需完成它的这个功能,之后把结果返回给调用者。它也不用去输出什么的,但为什么还是有一些函数,会在自己的函数中做一些输出呢??
这个问题问得好,你去理解下 这个mian函数
package onlyfun.action;
import java.util.Scanner;

public class test {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入您要查询的分数");
int   score=s.nextInt();
int   leave=(int)score/10;  // 1:这里是取商    2:取模就是取余数

switch (leave) {
case 9:
System.out.println("恭喜您,您的等级为A");
break;
case 8:
System.out.println("嗯,还不错。您的等级为B");
break;
case 7:
System.out.println("要加油啊,您的等级为C");
break;
case 6:
System.out.println("很幸运您的等级为D");
break;
default:
System.out.println("糟糕,您的等级为E");
break;

}
}
}
是不是也要输出结果了。在你以后的真实的项目中,你就发现你的说法是很正确的,函数就是完成某一个功能比如说操作数据库的类,返回一个结果,给业务层,业务层返回给web层,前台在用前台的技术比如js的一些框架调用。显示到前台,这就是所谓的web开发。现在在一些类里面打印出数据是为了测试程序。比如说单元测试,看看返回结果正确不正确。

今天总结不错,只是问题少了点。问题反应一个人的思维能力。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics