Java学习3

learnspf / 2023-08-04 / 原文

Java学习3

主要学习了scanner的用法和流程控制的结构

JavaDoc

  • javaDoc是用来生成自己的API文档的

  • 参数信息

    1. @author 作者名
    2. @version 版本号
    3. @since 指明需要最早使用的JDK版本
    4. @param 参数名
    5. @return 返回值情况
    6. @throws 异常抛出情况
  • 加在类上就是类的注释,加在方法上就是方法的注释

  • 利用指令产生JavaDoc文档: javadoc -encoding UTF-8 -charset UTF-8 文件名.java

Scanner对象

  • 通过Scanner类可以获取用户输入

  • 基本语法

    Scanner s = new Scanner(System.in);
    
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串;读取前需要使用hasNext()与hasNextLine()判断是否有输入数据

  • 关于next():

    next()不能得到带有空格的字符串!以空格为结束符

  • 关于nextLine():

    以Enter(回车)为结束符!输入的是回车之前的所有字符;可以获得空白

  • 示例:

    import java.util.Scanner;
    
    public class demo1 {
        public static void main(String[] args){
            //从键盘接收数据
           Scanner scanner =  new Scanner(System.in);
           System.out.println("请输入");
    
           String str = scanner.nextLine(); //程序会等待用户输入完毕
           System.out.println(str);
           
            //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
           scanner.close();	 
        }
    }
    
  • 题目:输入多个数字,求其总和与平均数。每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果。

    import java.util.Scanner;
    public class demo3 {
        public static void main(String[] args){
            double sum = 0;
            double average;
            //m为输入的数字个数
            int m = 0;
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入数字");
            while(scanner.hasNextDouble()){ //循环判断是否有数字输入
                double x = scanner.nextDouble();
                sum += x;//结果累加
                m++;//数字位数+1
                System.out.println("你输入了第" + m + "个数据,当前sum结果为:" + sum);
            }
            average = sum / m;//平均数
            //结果输出
            System.out.println("这" + m + "个数字的总和为: " + sum);
            System.out.println("这" + m + "个数字的平均数为: " + average);
    
            scanner.close();
        }
    }
    

结构

顺序结构

  • 语句与语句之间,框与框之间都是按照从上到下的次序执行的,是任何算法都离不开的基本算法结构

选择结构

if结构

  • if单选择结构

    if(){
        
    }
    
  • if双选择结构

    if(){
        
    }else{
         
    }
    
  • if多选择结构 一定要严谨

    if(){
        
    }else if(){
        
    }else if(){
        
    }else{
        
    }
    
  • if嵌套结构

    if(){
        if(){
            
        }
    }
    
  • 注意点:

    if语句中至多有一个else语句,else语句在所有的else if语句之后

    if语句可以有若干个else if语句,它们必须在else语句之前

    一旦其中一个else if语句检测为true,其他的else if语句及else语句都将跳过执行

switch结构

  • 匹配一个具体的值
switch(expression){
    case value :
        
        break;
    case value :
        
        break;
    default:
        
}
  • 变量类型注意点
    1. switch语句中的变量可以是byte/short/int/char
    2. JDK7开始支持String类型
    3. case标签必须为字符串常量或字面量

循环结构

while循环

while(){
    
}
  • 注意:一般情况下条件设置都会最终让while循环终止,实际写程序时注意避免死循环

do while循环

do{
    
}while(布尔表达式);
  • while是先判断再执行,最少可以不执行;do...while是先执行再判断,最少得执行一次

for循环

for(int i = 0;i<=100;i++){  //初始化;条件判断;迭代
   
}
  • for循环是最有效最灵活的循环结构

  • 典例1

//for循环输出1-1000内能被5整除的数,每行输出3个
public class ForDemo3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) { //1000.for
            if (i % 5 == 0) {
                System.out.print(i + "\t"); //print()输出完不换行
            }
            if (i % (3 * 5) == 0) {
                System.out.println(); //println()输出完换行,没有内容等价于'\n'
            }
        }
    }
}
  • for循环嵌套 典例
//打印九九乘法表
public class ForDemo4 {
    public static void main(String[] args){
        for(int i = 1;i<=9;i++){
            for(int j = 1;j<=i;j++){ //for循环嵌套
                System.out.print(j + "x" + i + "=" + j*i + "\t");
            }
            System.out.println(); //输出完一行换行
        }
    }
}
  • 增强for循环

​ JDK5引入的一种主要用于数组或集合的增强型for循环

public class ForDemo5 {
    public static void main(String[] args){
        int[] num = {1,2,3,4,55,6,7,88};//数组定义
        //遍历数组元素 增强for循环
        for(int x:num){ 
            System.out.println(x);
        }
        System.out.println("=========================");
        //与下面等价
        for(int i =0;i<5;i++){
            System.out.println(num[i]);
        }
    }
}

break

  • 作用:在任何循环的主体部分均可使用break控制流程,break用于强行退出循环,不执行循环中的剩余语句

continue

  • 用在循环语句体中,用于终止某次循环过程跳过循环中尚未执行的语句,接着进行下一次是否执行的判定

goto方法

image-20230802221216622

示例:输出101-150间的质数(不推荐使用)

public class LabelDemo {
    public static void main(String[] args){
        //输出101-150间的质数

        outer: for(int i = 101;i<=150;i++){
            for(int j = 2;j<(i/2);j++){
                if(i % j == 0)
                    continue outer; //跳了两层的循环
            }
            System.out.print(i + "\t");
        }
    }
}

正常写法:

public class LabelDemo {
    public static void main(String[] args){
        //输出101-150间的质数
        int j=0;
        int i=0;
        for(i = 101;i<= 150;i++){
            for(j = 2;j<i/2;j++){
                if(i % j == 0)
                    break;
            }
            if(j >= i/2 )
                System.out.println(i + "\t");
            else
                continue;
        }
    }
}

拓展

  • 将I编译生成的.class文件导入到IDEA工程中可以反编译,可以帮助看程序如何底层运行

  • IDEA快捷键

for(i = 0;i <100 ;i ++){
    
}
//等价于 100.for jdk17没有?存疑
  • print 与 println的区别

​ print()输出完不换行;println()输出完换行,没有内容等价于'\n'

  • 注意转义字符的字符输出和字符串输出的区别

    System.out.print(3 + '\t');
    System.out.print(3 + "\t");
    

    注:'\t'被当做数字与3一起相加输出,显然不符合我们原本想用制表符对齐的目的;利用“\t”则不会出现这种情况

  • 练习:打印三角形,可以指定三角形行数

  1. 自己写的
import java.util.Scanner;
public class TestDemo01 {
    //打印三角形 行数任意指定
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入三角形的行数:");
        int row,num,j; //row:行数 num:行数对应的每行字符个数
        row = scanner.nextInt();
        num = 1+2*(row-1);
        for(int i =1;i<=row;i++){
            j = 2*i - 1; //每行的有效字符个数
            for(int p = 1;p<=((num - j)/2);p++){ //(num - j)/2 每行的空格字符个数的一半
                System.out.print(" ");
            }
            for(int o = 1;o<=j;o++)
                System.out.print('*');
            for(int p = 1;p<=((num - j)/2);p++){  //这里可以不需要再输出空格了 看完教程发现的
                System.out.print(" ");
            }
            System.out.println();//换行
        }
        scanner.close();
    }
}

2.教程标准写法

public class TestDemo2 {
    public static void main(String[] args) {
        //打印三角形,指定行数为5
        for(int i =1;i<=5;i++){
            for(int j = 5;j>i;j--) //j>i是保证开头没有多余s空格
                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();
        }
    }
}