>  기사  >  Java  >  Java 논리 제어를 사용하는 방법

Java 논리 제어를 사용하는 방법

王林
王林앞으로
2023-04-28 15:28:061210검색

    1. 블록 범위

    우선 제어 구조를 심도 깊게 배우기 전에 블록(block)의 개념을 이해해야 합니다.

    Block: 복합 문은 한 쌍의 중괄호로 묶인 여러 개의 간단한 Java 문을 나타냅니다. 블록은 변수의 범위를 결정합니다. 블록은 다른 블록 내에 중첩될 수 있습니다.

    public class TestDemo220425 {
        public static void main(String[] args) {
            int n = 10;
            {
                int k = 20;
                int n = 20;
            }
        }
    }

    이 코드에서 메인 함수에서 괄호로 묶인 부분이 블록입니다. 블록은 다른 블록 내에 중첩될 수 있지만 Java에서는 동일한 이름의 변수를 중첩 블록에 선언할 수 없습니다. 예를 들어 위 코드의 내부 블록에 있는 int n = 20은 잘못되었습니다. 여기서 우리는 C/C++에서 전역 변수를 구별해야 합니다. 동일한 이름을 가진 지역 변수를 만나면 지역 변수가 먼저 사용되고 전역 변수는 보호됩니다. Java에서는 전역 변수에 대한 개념이 없습니다. 이것은 단지 비유일 뿐입니다.)

    두 번째, 순차 구조

    순차 구조는 비교적 간단하며, 코드가 작성된 순서대로 한 줄씩 실행됩니다.

    그림:

    Java 논리 제어를 사용하는 방법

    3개, 분기 구조

    그림:

    Java 논리 제어를 사용하는 방법

    참고: /else if가 병렬 관계인 경우, else가 둘 중 하나/또는 관계인 경우와 달리 이를 다중 분기라고 합니다. 구조.

    분기 구조에 대한 몇 가지 참고 사항:

    1. if 괄호 안의 표현식은 0 이외의 것은 부울 표현식일 수 없으며 0은 거짓을 의미합니다.

    2. Java 코딩 스타일에는 end-of-line 스타일을 권장합니다.

    3. 즉, if/else 문에 괄호를 추가하는 것이 가장 좋습니다. 그렇지 않으면 if/else 문이 여러 개 있을 때 else가 더 읽기 쉽습니다. 가장 가까운 else와 일치

    public class TeseDemo220424 {
        public static void main(String[] args) {
            int x = 10;
            int y = 10;
            if (x == 10)
                if (y == 10)
                    System.out.println("aaa");
            else //这个else其实匹配的是if(y == 10)
                System.out.println("bbb");
        }
    }

    switch 문 문제(핵심)

    public class TeseDemo220424 {
        public static void main(String[] args) {
            int a = 3;
            switch(a){
                default:
                    System.out.println("输入错误!");
                    break;
                case 1:
                    System.out.println(1);
                    break;
                case 2:
                    System.out.println(2);
                    break;
            }
        }
    }

    참고:

    1. 기본값이 어디에 있든 대소문자가 일치하지 않는 한 기본값이 직접 사용됩니다.

    2. 각 case문과 default문 뒤의 break문은 생략할 수 없으며, 특별한 경우가 아닌 이상 break문을 생략할 수 없습니다.

    3. 스위치 구조의 유일한 키워드는 루프에 사용되는 Case, Break, Continue입니다. 이는 분기 구조이므로 혼동하지 마세요.

    4. 스위치 대괄호의 데이터 유형은 byte, short, int, char, String, enum 유형만 가능하며 대소문자 뒤의 상수는 스위치와 일치합니다. (모든 정수가 int로 변환되기 때문에 long일 수 없습니다. 그러나 long을 int로 변환하면 정밀도가 손실됩니다.)

    5. 사례 뒤의 상수 값은 반복될 수 없습니다. 각 사례는 다른 상황을 나타냅니다.

    6. 표현식은 스위치의 괄호 안에 배치될 수 있지만 if 문과 달리 좀 더 복잡한 표현식은 배치될 수 있습니다.

    7. Switch 문은 중첩될 수 있지만 보기에 좋지 않습니다.

    Four, loops

    세 가지 주요 루프: while 루프, for 루프, do while 루프(루프에 대한 구체적인 기본 정의는 소개하지 않습니다. 여기서는 주의해야 할 몇 가지 사항만 설명합니다)

    4.1, 실수하기 쉽습니다.

    1. 루프의 여러 부분, 루프 변수의 정의, 조건부 판단, 루프 본문 및 루프 변수의 반복. 루프 변수의 반복에 주의하세요. 루프 변수가 루프를 벗어나는 방향으로 움직일 때까지 반복하지 않으면 무한 루프가 발생할 수 있습니다.

    2. 루프 내에서 루프 변수를 조작하지 마세요. 루프 변수를 사용해야 하는 경우에도 임시 변수를 사용하여 해당 값을 받은 후 사용하세요.

    3. 부동 소수점 숫자를 루프 변수로 쉽게 사용하지 마세요.

    public class TestDemo220425 {
        public static void main(String[] args) {
            for(double x = 0;x != 10;x += 0.1){
                System.out.println("haha");
            }
        }
    }

    예상대로 이 코드는 무한 루프에 있습니다. 이는 부동 소수점 숫자를 루프 변수로 사용한다는 의미입니다. 왜냐하면 0.1을 저장하면 소수 부분을 이진수로 정확하게 표현할 수 없기 때문에 더할 때마다 대략적인 값이 되고 그러면 더한 후 10을 그냥 건너뛸 수도 있으므로 루프가 계속됩니다.

    4.2, break 문

    public class TeseDemo220424 {
        public static void main(String[] args) {
            int i = 1;
            while(i <= 10){
                if(i == 2){
                    break;
                }
                System.out.println("hehe");
                i++;
            }
        }
    }

    프로그램 실행 스크린샷:

    Java 논리 제어를 사용하는 방법

    break 문의 기능은 현재 루프에서 벗어나는 것입니다. 예를 들어, 위의 i == 2인 경우 점프합니다. while 루프이므로 하나만 출력됩니다.

    break의 확장된 사용법:

    Java에서는 goto문이 없지만 디자이너는 goto문의 아이디어가 문제가 되지 않는다고 믿기 때문에 실제로 특정 상황에서 루프를 벗어나는 좋은 효과를 가질 수 있습니다. 따라서 레이블이 지정된 루프 외부로 중단될 수 있는 레이블이 있는 break 문이 Java에서 개발되었습니다. (태그가 법적 식별자인 한)**

    예:

    public class TestDemo220425 {
        public static void main(String[] args) {
            label1:
            while(true){
                for(int i = 0;i < 10;i++){
                    if(i == 3){
                        break label1;
                    }
                    System.out.println(i);
                }
            }
            System.out.println("已跳出循环!");
        }
    }

    프로그램 실행 스크린샷:

    Java 논리 제어를 사용하는 방법

    可以看到,到我们利用标签后,可以指定跳出到哪里。如果这里只是用break,不用标签的话,那么break就只会跳出里层的for循环,外面的while还是一个死循环,用了标签之后,当i== 3,就可以直接跳出到while循环的外部。

    4.3,continue语句

    public class TeseDemo220424 {
        public static void main(String[] args) {
            int i = 1;
            while(i <= 10){
                if(i == 2){
                    continue;
                }
                System.out.println("hehe");
                i++;
            }
        }
    }

    程序运行截图:

    Java 논리 제어를 사용하는 방법

    continue语句的作用是结束本轮循环而开始下一次的循环,如上题,当i == 2,所以就会直接跳过后面的语句,也就是i++不会执行了,导致i一直等于2,所以陷入了死循环。当然如果你这里用for循环就不会这样了,因为i++的执行顺序在前面,continue影响不到

    continue扩展用法:

    同样的,在continue里面,也是可以使用标签的,可以指定跳到与标签匹配的循环的首部。

    示例:

    public class TestDemo220425 {
        public static void main(String[] args) {
            label1:
            for(int i = 0;i < 10;i++){
                if(i == 3){
                    continue label1;
                }
                System.out.println(i);
            }
    }

    程序运行截图:

    Java 논리 제어를 사용하는 방법

    五,输入输出

    5.1,输出到控制台

    Java 논리 제어를 사용하는 방법

    利用%结合上面的转换符就可以进行格式化的输出,当然在进行格式化输出的时候,也可以运用一些标志,比如输出的时候带前缀,带正负号等等…

    Java 논리 제어를 사용하는 방법

    5.2,从键盘输入

    public class TeseDemo220424 {
        public static void main(String[] args) {
            Scanner myscanner = new Scanner(System.in);
            System.out.println("请输入年龄");
            int num = myscanner.nextInt();
            System.out.println(num);
            System.out.println("请输入名字");
            String str = myscanner.nextLine();//读入一行
            System.out.println(str);
            System.out.println("请输入专业");
            String str1 = myscanner.next();
            System.out.println(str1);//读入一个字符串,遇到空格停止
        }
    }

    这里就是要注意你的输入与你接收的方法要对应,另外就是当你用了nextLine()来接收一行的时候,要注意它前面有不有用输入的方法,因为你的换行会被当成一行读入到nextLine()里面,这里就类似于C语言里面吃掉缓冲区里面的回车是一个道理。

    程序运行截图:

    Java 논리 제어를 사용하는 방법

    扩展,在用键盘进行输入的时候,我们是能够看到我们自己的输入的,但是在某些情况下,比如输入密码,我们一般是不想让人看到的,所以这里可以运用到Console类。(这里只做简要介绍)

    Console类:访问与当前Java虚拟机关联的基于字符的控制台设备(如果有的话)的方法,也即使从控制台接收输入的方法。

    使用示例:

    import java.io.Console;
    public class TestDemo220425 {
        public static void main(String[] args) {
            Console cons = System.console();
            String username = cons.readLine("User name: ");
            char[] passwd = cons.readPassword("Password:");
        }
    }

    在IDEA下的运行截图:

    Java 논리 제어를 사용하는 방법

    ❌???怎么直接报空指针异常了,寻思着这里也没用到指针吧,感到十分的不解…????????

    后来,度娘告诉我是这样的:在使用IDEA等集成开发环境中,使用Console将全为null,表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。以至于我们只能去控制台下或者linux环境下去运行程序,如下图在控制台下运行:

    Java 논리 제어를 사용하는 방법

    可以看到在控制台下运行正常,并且我们输入的密码是看不到的(这里真的输入了的哦,只是看不到,中国人不骗中国人的!????)

    5.3,循环输入

    public class TeseDemo220424 {
        public static void main(String[] args) {
            Scanner myscanner1 = new Scanner(System.in);
            while(myscanner1.hasNextInt()){
                int age = myscanner1.nextInt();
            }
        }
    }

    hasNextInt():如果此扫描器输入中的下一个标记可以使用nextInt()方法将其解释为默认基数中的int值,则返回true。也即是说只有你下一个输入的是int类型的值才能够进入循环。

    程序运行截图:

    Java 논리 제어를 사용하는 방법

    循环输入的时候可以ctrl + D 进行正常退出

    六,猜数字游戏

    这里主要是介绍Java里面的生成随机数的方法

    所在包:Java.util.random

    import java.util.Random;
    public class TeseDemo220424 {
        public static void main(String[] args) {
    //        生成随机数
            Random random = new Random();
            int rannum = random.nextInt(100);//生成[0,100) 的随机数 其他范围可以通过在后面加上数来进行范围改变,默认左边都是从0开始
            
        }
    }

    对于int rannum = random.nextInt();如果你后面nextInt()中不给值,那么它产生的就是所有有效的整数,包括正数,负数,0

    注意:Random random = new Random(2022); 这里在定义随机数对象的时候是可以传参的,因为生成随机数是以时间戳为参考的,所以当你传入一个数后,他就只会以这个数为标准进行时间戳的计算,进而产生的随机数每次都是一样的。

    其他方法:

    Java 논리 제어를 사용하는 방법

    其他方法主要就是Math.random(),这个产生的是0~1之间的小数,左闭右开。当然这个是没有上面那种产生同一个随机数的用法的。

    위 내용은 Java 논리 제어를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제