java学习笔记3-流程控制


自用的学习笔记,若有错误欢迎指出。

java包机制

为了更好地组织类,java提供了包机制,用于区别类名的命名空间。

包语句的语法格式为:

package pkg1[.pkg2[.pkg3...]];

一般利用公司域名倒序来作为包名字。例如:www.baidu.com,如果要建包的话:com.baidu.www这样来命名。

导入包

当我们需要调用一些函数或者某一个包的成员的时候,我们需要在java程序中明确的导入该包。使用import关键字来实现包导入。

import package1[.package2...].(classname|*);
import java.util.Date;

使用*来导入这个包下面的所有类

import com.shadowprism.base.*;

JavaDoc

  • javadoc命令是用来生成自己的API文档的。
  • 参数信息
    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的JDK版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况

文档注释可以给类加注释的同时也可以给方法加注释。

package com.shadowprism.base;

/**
 * @author shadowprism
 * @version 1.0
 * @since 1.8
 */
public class Doc {
    String name;
    
    /**
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name){
        return name;
    }
}

使用cmd在java文件目录下生成JavaDoc文档。

  1. 使用cd /d F:你的文件\你的文件来定位到你的文件位置
  2. 在java文件目录下输入javadoc -encoding UTF-8 -charset UTF-8 Doc.java
#使用-encoding UTF-8 -charset UTF-8是为了防止文章出现乱码
javadoc -encoding UTF-8 -charset UTF-8 Doc.java

**有待解决的问题:

  • 在cmd中输入的javadoc输出结果为“不是内部指令…”,但是在jdkbin目录下却可以运行javadoc -help

java流程控制

Scanner对象

java提供的一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

基本语法:

Scanner scan = new Scanner(System.in);

通过Scanner类的next()nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()hasNextLine()判断是否还有输入的数据。

实例:

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //创建一个扫描器对象来接收键盘数据
        Scanner scan01 = new Scanner(System.in);
        Scanner scan02 = new Scanner(System.in);

        System.out.println("使用next方式来接收: ");

        //判断用户有没有输入字符串
        if (scan01.hasNext()){
            String str = scan01.next();
            System.out.println("输入的内容为:" + str);
        }

        System.out.println("使用nextLine方式来接收: ");

        String str = scan02.nextLine();
        System.out.println("输入的内容为:" + str);
        
        //凡是属于IO流的类如果不关闭会一直暂用资源,建议用掉就关闭
        scan01.close();
		scan02.close();
    }
}

注意:hasNext()方法中,如果输入的内容为hello world这样带中间带空格的字符串,最终结果只会输出为hello。需要使用hasNextLine()方法。

  • next():
    • 一定要读取到有效字符后才可以结束输入
    • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
    • 只有输入有效字符后才将其后面的空白作为分隔符或者结束符
    • next()不能得到带有空格的字符串
  • nextLine():
    • 以回车键ENTER为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
    • 可以获得空白

Scanner进阶

实例:我们可以输入多个数字,并且求其总和和平均数,每输入一个数字用ENTER键确认。如果输入了非数字就表示我们要结束输入,执行输出结果。

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        
        Scanner scanner01 = new Scanner(System.in);

        double sum = 0; //求和
        double average = 0; //平均数
        int inputNumTimes = 0; //计算输入多少个数字

        System.out.println("请输入数字:");

        while (scanner01.hasNextDouble()){
            double d = scanner01.nextDouble();
            inputNumTimes++;

            sum = sum + d; //求和
        }

        average = sum / inputNumTimes; //计算平均数

        System.out.println("求和结果为:" + sum);
        System.out.println("平均数为:" + average);

        scanner01.close(); //结束进程
    }
}

结构

顺序结构

  • java的基本结构就是顺序结构,除非特别指明,否则就按顺序一句一句执行。
  • 顺序结构是最简单的算法结构。
  • 语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。

if选择结构

if单选择结构

我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示。

语法:

if(布尔表达式){
    //如果布尔表达式为true将执行语句
}

实例:

Scanner scanner = new Scanner(System.in);

String str = scanner.nextLine();

if (str.equals("Boy")){
    System.out.println(str);
}

scanner.close();

if双选择结构

例子:如果一个公司需要收购软件,如果成功了就需要给别人支付100w。如果失败就选择自己开发软件。这样就需要有两个判断,需要一个双选择结构,所以就有了if -else结构。

语法:

if(布尔表达式){
    //如果布尔表达式为true
}else {
    //如果布尔表达式为false
}

实例:

Scanner scanner = new Scanner(System.in);

System.out.println("请输入成绩:");

int i = scanner.nextInt();

if (i >= 60){
    System.out.println("及格");
}else {
    System.out.println("不及格");
}

scanner.close();

if多选择结构

语法:

if(布尔表达式){
    //如果布尔表达式1的值为true,执行代码
}else if {
    //如果布尔表达式2值为true,执行代码
}else if {
    //如果布尔表达式3值为true,执行代码
}else {
    //如果以上的布尔表达式都不为true,执行代码
}

实例:

Scanner scanner = new Scanner(System.in);

System.out.println("请输入成绩:");

int i = scanner.nextInt();

if (i == 100){
    System.out.println("满分");
}else if (i >= 80 && 1 < 100){
    System.out.println("优秀");
}else if (i >= 70 && 1 < 80){
    System.out.println("良");
}else if (i >= 60 && 1 < 70){
    System.out.println("及格");
}else {
    System.out.println("不及格");
}

scanner.close();

if嵌套结构

语法:

if(布尔表达式1){
    //如果布尔表达式1的值为true,执行代码
   if (布尔表达式2){
       //如果布尔表达式2的值为true,执行代码
   }
}

switch多选择结构

多选择结构还有一个实现方式就是switch case语句。

switch case语句判断一个变量与一个系列值中某个值是否相等,每一个值称为一个分支。

switch语句中的变量类型可以是:

  • byteshortint、或者char
  • 从JavaSE7才开始switch支持字符串String类型
  • 同时case标签必须为字符串常量火字面量

语句:

switch(expression){
    case value :
        //语句
        break; //可选
    case value :
        //语句
        break; //可选
    //可以有任意数量的case语句
    default : //可选
        //语句
}

实例:

char grade = 'A';

switch (grade) {
    case 'A':
        System.out.println("优秀");
        break;
    case 'B':
        System.out.println("良好");
        break;
    case 'C':
        System.out.println("及格");
        break;
    case 'D':
        System.out.println("再接再厉");
        break;
    default:
        System.out.println("未知等级");
        break;
}

*如果不使用break的话,程序会一直运行到最后一个判断。

循环结构

  • while循环
  • do...while循环
  • for循环

while循环

while循环是最基本的循环,它的结构为:

while(布尔表达式){
    //循环结构
}
  • 只要布尔表达式为true,循环就会一直下去。
  • 我们大多数情况下是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。

do while循环

  • 对于while语句而言,如果不满足条件则不能进入循环。
  • do...while循环至少会执行一次循环。
int i = 0;
int sum = ;

do{
    sum = sum + i;
    i++;
}while(i <= 100);

System.out.println(sum); // 5050

For循环

  • for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

  • for循环执行的次数是在执行前就确定的。

for(初始化; 布尔表达式; 更新){
    //代码语句
}

实例1:计算1-100之间的奇数和偶数的和

int oddSum = 0; //初始化奇数和
int evenSum = 0; //初始化偶数和

for (int i = 0; i < 100; i++) {
    if (i % 2 != 0){
        oddSum += i;
    }else {
        evenSum += i;
    }
}

System.out.println("奇数和为:" + oddSum); // 2500
System.out.println("偶数和为:" + evenSum); // 2450

实例2:用while或者for循环输出1-1000之间能被5整除的数,并且每行输出3个。

for (int i = 0; i <= 1000; i++){
  if (i % 5 == 0){
    System.out.print(i + "\t"); //这里的"\t"为转义字符
  }
  if (i % 15 == 0){
    System.out.println();
  }
}

实例3:打印九九乘法表

for (int i = 1; i <= 9; i++){
  for (int j = 1; j <= i; j++){
    System.out.print(i + "*" + j + "=" + (i * j) + "\t");
  }
  System.out.println();
}

增强型for循环

  • 在java5引入了一种主要用于或集合的增强型for循环
  • java增强型for循环语法格式如下:
for (声明语句: 表达式){
  //代码语句
}
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

break & continue

  • break:在任何循环语句的主题部分,均可用break来控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句。(break语句在switch语句中也有使用)
  • continue语句用于循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

流程控制练习

打印一个三角形

for (int i = 1; i <= 5; i++){
  for (int j = 5; j >= i; j--){
    System.out.print("#");
  }
  System.out.println();
}

//输出结果
#####
####
###
##
#

打印一个等边三角形

//第一步:打印等边三角形的左半边
for (int i = 1; i <= 5; i++){
  for (int j = 5; j >= i; j--){
    System.out.print(" ");
  }
  for (int j = 1; j <= i; j++){
    System.out.print("#");
  }
  System.out.println();
}

//输出结果
     *
    **
   ***
  ****
 *****;

//第二步:打印等边三角形的另一边
//之前的不变
for (int i = 1; i <= 5; i++){
  for (int j = 5; j >= i; j--){
    System.out.print(" ");
  }
  for (int j = 1; j <= i; j++){
    System.out.print("*");
  }
  
  //在此加入:
  for (int j = 1; j < i; j++){
    System.out.print("*");
  }
  
  System.out.println();
}

//输出结果
     *
    ***
   *****
  *******
 *********;

//其中等边三角形的右半边打印的是
*
**
***
****;

后记

之后,我也会继续学习java,继续更新博客。分享知识、结交朋友,感谢你的观看!

参考链接

B站:狂神说java


文章作者: 光影N棱镜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 光影N棱镜 !
  目录