Java学习之第二章--基本语法

【算术运算符】

1.取模:% :取余数,结果的符号取决于被模数
int i1=12%5;
int i2=-12%5;
int i3=12%(-5);
int i4=-12%(-5);
System.out.println(i1);//2
System.out.println(i2);//-2
System.out.println(i3);//2
System.out.println(i4);//-2
2.String类型只能与其他数据类型做连接运算,且结果为String类型
**3.**任意运算单元的长度超过int
如果有任何运算单元的长度超过int,那么运算结果就按照最长的长度计算
比如
int a = 5;
long b = 6;
a+b -> 结果类型是long

public class HelloWorld {
    public static void main(String[] args) {
 
        int a = 5;
        long b = 6;
        int c = (int) (a+b); //a+b的运算结果是long型,所以要进行强制转换
        long d = a+b;
         
    }
}

4.任意运算单元的长度小于int
如果任何运算单元的长度都不超过int,那么运算结果就按照int来计算
byte a = 1;
byte b= 2;
a+b -> int 类型

public class HelloWorld {
    public static void main(String[] args) {
        byte a = 1;
        byte b= 2;
        byte c = (byte) (a+b); //虽然a b都是byte类型,但是运算结果是int类型,需要进行强制转换
        int d = a+b;
    }
}

5.自增 自减操作符置前以及置后的区别
i++; 先取值,再运算
++i; 先运算,再取值

public class HelloWorld {
    public static void main(String[] args) {
        int i = 5;
        System.out.println(i++); //输出5
        System.out.println(i);   //输出6
         
        int j = 5;
        System.out.println(++j); //输出6
        System.out.println(j);   //输出6
    }
}

int i = 1;
int j = ++i + i++ + ++i + ++i + i++;
// j=18

【赋值运算符】

+= -= *= %=
//注意:short s=10;
//s=s+3;编译不通过,因为s+3中的s变成了默认的int 型。
s=(short)(s+1);//不建议如此实现
s+=1;//既可以实现运算,又不会更改s的数据类型

【逻辑运算符】

1.&与&&的区别:&:不管左边时true还是false,右端都会进行运算
&&:当左端为false时,右端不再进行运算
//我们在使用时,选择:&&
boolean a=true;
boolean b=false;
int i1=10;
if(a&(i1++)>0){
System.out.println(“今天天气很晴朗”);
}else{
System.out.println(“难得没有雾霾”);
}
System.out.println(“i3”);//11
int i2=10;
if(a&&(i4++)>0){
System.out.println(“今天天气很晴朗”);
}else{
System.out.println(“难得没有雾霾”);
}
System.out.println(“i2”);//10
2.|与||的区别:|:当左端为true时,右端照样做运算
||:当左端为true时,右端不再进行运算
//我们在使用时,选择:||
int i3=10;
if(a|i3++>0){
System.out.println(“今天天气很晴朗”);
}else{
System.out.println(“难得没有雾霾”);
}
System.out.println(“i3”);//11
int i4=10;
if(a||i4++>0){
System.out.println(“今天天气很晴朗”);
}else{
System.out.println(“难得没有雾霾”);
}
System.out.println(“i4”);//10

**

【位运算符】

**

【三元运算符】

**
(条件表达式)?表达式1:表达式2;
要求:表达式1与表达式2为同种类型(既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致)
//三元运算符在一定程度上可以与if-else互换。(三元运算符一定可以转换为if-else,反之不成立。)
如 String str=i>j?“i大”:“j大”;
***String str1=i>j?“i大”:(i==j)?“相等”:“j大”;

**

【switch语句】**

1.switch(i)==>i只能为char,byte,short,int,枚举,String
2.case条件:其中条件只能是值,不能是取值范围
3.当多个case语句处理的语句块一致时,可以统一来书写。
4.switch-case:离散的值(效率高,但有局限性)
if-else:有数据范围,对区间判断,boolean类型的判断(适用范围广)
//二者可嵌套,在switch语句中插if-else.

**

【循环结构】**

1.for循环与while 循环可以相互转换,只是有时用for方便,有时用while方便,但for(int i=0;;)中的 i 出了for循环便不再生效,即还可定义i。
//无限循环:
for( ; ; ){}
或者
while(true){
}

说明:一般情况下,在无限循环内部要有循环终止的语句,使用break实现。若没有,那就是死循环(会大量消耗内存,导致内存溢出)!
练习:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。

import java.util.Scanner;
class TestExer{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
int a=0;//记录正数的个数
int b=0;//记录负数的个数
for( ; ; ){
System.out.println("请输入一个整数: ");
int num=s.nextInt();
if(num>0)
a++;
else if(num<0)
b++;
else
break;
}
或者
import java.util.Scanner;
class TestExer{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
int a=0;//记录正数的个数
int b=0;//记录负数的个数
while(true){
System.out.println(“请输入一个整数: “);
int num=s.nextInt();
if(num>0)
a++;
else if(num<0)
b++;
else
break;
}
2.for( int j=0; j<4 ; j++){//外层循环控制行数
for(int i=0 ; i<5 ; i++){//内层循环控制列数,注意行与列函数关系
System.out.print(”*”);
}
}
//两层控制二维结构,三层控制三维结构…
3.练习:打印如下图形
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
**

【嵌套循环】**

  1. 练习:100以内的所有质数
    class TestPrimeNumber{
    public static void main(String[] args){
    boolean flag=false;
    long start=System.currentTimeMillis();//获取系统当前的毫秒数
    for(int i=2;i<=100;i++) {//实现100以内的自然数的遍历
    //如何判断i是否为一个质数
    for(j=2;j<Math.sqrt(i);j++){
    if(i%j==0){
    flag=true;

    break;//改进
    }
    }
    if(!flag){// if(flag==false)
    System.out.println(“i”);
    }
    flag=false;//防止当flag变为true后,便默认一直为true
    }
    long end=System.currentTimeMillis();
    System.out.println(“所花费的时间为:”+(end-start));//35535—加上break:10059

    }
    }

  2. break:使用在switch-case中或者循环中
    如果使用在循环中,表示:结束当前循环
    continue:使用在循环结构中
    表示:结束当次循环
    //关于break/continue标签的使用:break/continue 在内层只结束内层循环,在外层则结束外层循环,若非要break或continue在内层结束外层循环,则可添加一个标签,示范如下:
    label:for(int i=1;i<5;i++){
    for(int j=1;j<=10;j++){
    if(j%4==0){
    //break;
    //continue;
    //break label;
    continue label;//若break/continue结束了循环,则后面的语句(两个System.out)都不再执行,且紧跟他们后面不应该再添加语句,因为该语句永远无法被执行
    }
    System.out.print(j);
    }
    System.out.println();
    }
    }
    3.嵌套for循环之质数的输出法二(添加标签):
    在这里插入图片描述
    4.流程控制练习题目:
    在这里插入图片描述

【循环控制】

1.结束当前循环:
break; 只能结束当前循环

 public class HelloWorld {
    public static void main(String[] args) {
          
        //打印单数    
        for (int i = 0; i < 10; i++) {
             
            for (int j = 0; j < 10; j++) {
                System.out.println(i+":"+j);
                if(0==j%2) 
                    break; //如果是双数,结束当前循环
            }
             
        }
         
    }
}

2.使用boolean变量结束外部循环
借助boolean变量结束外部循环
需要在内部循环中修改这个变量值
每次内部循环结束后,都要在外部循环中判断,这个变量的值

public class HelloWorld {
    public static void main(String[] args) {
        boolean breakout = false; //是否终止外部循环的标记
        for (int i = 0; i < 10; i++) {
 
            for (int j = 0; j < 10; j++) {
                System.out.println(i + ":" + j);
                if (0 == j % 2) {
                    breakout = true; //终止外部循环的标记设置为true
                    break;
                }
            }
            if (breakout) //判断是否终止外部循环
                break;
        }
 
    }
}

3.使用标签结束外部循环
在外部循环的前一行,加上标签
在break的时候使用该标签
即能达到结束外部循环的效果

public class HelloWorld {
    public static void main(String[] args) {
          
        //打印单数    
        outloop: //outloop这个标示是可以自定义的比如outloop1,ol2,out5
        for (int i = 0; i < 10; i++) {
             
            for (int j = 0; j < 10; j++) {
                System.out.println(i+":"+j);
                if(0==j%2) 
                    break outloop; //如果是双数,结束外部循环
            }
             
        }
         
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41204918/article/details/82958512