JAVA学习-包机制、Scanner、循环

包机制

包相当于一个文件夹,包名一般利用公司域名倒置作为包名。如www.baidu.com,包名为com.baidu.www。

包语句应该存在于类的上方,如

package com.tang.operator; 

public class Demo06 {
    public static void main(String[] args) {
    }
}

如果创建com.tang 没有出现包分层的情况,可以按照下图操作:

取消勾选Compact Middle Packages

引用一个包

引用包 要用 import

Scanner

基本语法

Scanner type = new Scanner(System.in);

type 为名字

使用方法

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

如使用next()获取,hasNext()方式判断:

package com.tang.scanner;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
    Scanner type = new Scanner(System.in);
        System.out.println("使用next方式就收:");
        //判断用户有没有输入
        if (type.hasNext()){
            //使用next方式接受
            String str = type.next();
            System.out.println("输出的内容为:"+str); 
        }

        type.close(); //即使关闭I/O 节省资源
    }

}

如使用nextLine()方式获取,hasNextLine()方式判断:

package com.tang.scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner type = new Scanner(System.in);
        System.out.println("使用nextLine方式接受:");
        if (type.hasNextLine()){
            String str = type.nextLine();
            System.out.println(str);
        }
    }
}
  • next()一旦输入空格就断了
  • nextLine()的结束符为回车,不会因为空格断掉

对于hasNext判断的理解

实验可证明,在上面两种代码中,去掉hasNext()或则hasNextLine()并没有影响,但可以思考其作用,如下:

package com.tang.scanner;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        int a = 0;
        float b = 0.0f;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        a = scanner.nextInt();
        System.out.println(a);
                
    }
}

这是一个让用户输入整数的代码,并且输入的值赋值于a。这个代码没有写hasNextInt(),也就是没有判断用户输入的是不是整数,一旦输入的不是整数,代码就会报错,得不到任何反馈。但如果,我们使用hasNextInt(),就不同,如:

package com.tang.scanner;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        int a = 0;
        float b = 0.0f;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        if (scanner.hasNextInt()){
            a = scanner.nextInt();
            System.out.println("你输入的整数是:"+a);
        }else System.out.println("你输入的不是整数!");

    }
}

关于hasNext的应用

题目: 做一个程序,可以记录每次用户输入的数据,并提示这是第几个输入的数据,当前的输入数据众和为多少,直到用户输入的不是数据时,停止运行,并计算出所有数据的个数,和值,平均值。

代码如下:

package com.tang.scanner;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double sum = 0;
        int a = 0;
        System.out.println("请输入需要计算的数据:(每个数据用回车隔开)");
        while (scanner.hasNextDouble()){
            double b = scanner.nextDouble();
            a++;
            sum = sum + b;
            System.out.println("这是你输入的第"+a+"个数据,它的值为"+b+",当前数据众和为:"+sum);
            System.out.println("请继续输入下一个数据,结束请输入任意不为数字的字符");

        }
        System.out.println("你一共输入了"+a+"个数据,数据总和为:"+sum+",数据平均值为:"+(sum/a));


        scanner.close();
    }
}

循环结构

首先,记住for循环的一种简单输入的方式(在idea):for.100 这就会自动输出 for (int i = 0; i <= 100; i++) {} 这个格式。

题一 计算0到100之间所有奇数,偶数的和

我的代码:

public class Demo01 {
    public static void main(String[] args) {
        // 计算0到100之间所有奇数,偶数的和
        int sumJi = 0;
        int sumOu = 0;
        for (int i = 0; i <= 100; i+=2) {
            sumOu = sumOu + i;
        }
        for (int j = 1; j <= 100; j+=2) {
            sumJi = sumJi + j;
        }
        System.out.println("所有偶数的和:"+sumOu);
        System.out.println("所有奇数的和:"+sumJi);
    }
}

老师的代码:

public class Demo02 {
    public static void main(String[] args) {
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i <= 100; i++) {
            if (i%2==0){
                evenSum = evenSum + i;
            }else {
                oddSum = oddSum + i;
            }
        }
        System.out.println("这是偶数和:"+evenSum);
        System.out.println("这是奇数和:"+oddSum);
    }
}

我觉得老师的代码要精简很多,先判断奇数偶数,再相加。

题二 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

用for:

public class Demo03 {
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            if (i%5==0){
                System.out.println(i);

            }
        }
    }
}

用while:

public class Demo04 {
    public static void main(String[] args) {
        int i = 0;
        while(i<=1000){
            if (i%5==0){
                System.out.println(i);
                i++;
            }else i++;
        }
    }
}

但是,没有解决每行输出三个这个问题。

老师的代码:

public class Demo04 {
    public static void main(String[] args) {
        int i = 0;
        while(i<=1000){
            if (i%5==0){
                System.out.print(i+"\t"); //这里时print不是println 表示输出不换行
                i++;                     // 且为了方便查看 \t 是为了留距离
            }else i++;
            if (i%(5*3)==0){   //这里是判断什么时候一行输出了三个了,可以换行了          
                System.out.println("\n");
            }
        }
    }
}

学到了print与println的区别。print输出结束不换行,println是输出完换行。

题三 打印九九乘法表

我的思路:按照j*i的思路写,i永远比j大,j永远小于等于i;i还可以表示行数,而一旦j等于i就换行。

九九乘法表的样子

1*1=1	

1*2=2	2*2=4	

1*3=3	2*3=6	3*3=9	

1*4=4	2*4=8	3*4=12	4*4=16	

1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	

1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	

1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	

1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	

1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	
// 我的做法
ublic class Demo05 {
    public static void main(String[] args) {
        int j = 1;
        for (int i = 1; i <= 9; i++) {
            while (j<=i){
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
                j++;
            }
            System.out.println(); //println 就已经换行了
            j=1;
        }
    }
}

老师的做法更加精简,用两个for循环:

public class Demo06 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j<=i ; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println();
        }
    }
}

break continue

break

break在任何循环语句的主题部分,均可用break控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)

continue

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

注意,continue只会终止所在循环的这个循环的本次循环,也就是说,如果是嵌套类的循环,continue在最里面的循环,他不会终止它属于的循环的外面的循环。而break是直接跳出当前所在的循环,如果所在循环外面还有循环,还是会进行判断,符合条件再次进入。

思考题,打印一个三角形

三角形如下:

     *
    ***
   *****
  *******
 *********

思路是把这个图形分割成三份,空格部分的倒三角,半个三角,和另外半个三角,然后一行一行打印出来。

public class Demo07 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int i1 = 5; i1 >=i; i1--) {
                System.out.print(" ");
            }
            for (int i1 = 1; i1 <= i; i1++) {
                System.out.print("*");
            }
            for (int i1 =1 ; i1 < i; i1++) { //这里不写i1<=i,就可以在第一行只有一个*
                System.out.print("*");

            }
            
            System.out.println();
        }
    }
}
posted @ 2022-02-11 17:28  老哥不老  阅读(69)  评论(0)    收藏  举报