操作符
算数操作符
基本的有:
+ - * / %
%:取模(得到的是小于除数的值)
自增 自减
++ --
i++; 先取值,再运算
++i; 先运算,再取值
public class Oneday{
public static void main(String[] args){
int i=5;
int j=4;
int num1=3;
int num2=4;
int a=i+j;
int b=i-j;
int c=i*j;
int d=i/j;
int e=i%j;
//System.out.printf("%d,%d,%d,%d,%d",a,b,c,d,e);
System.out.println(num1++); //输出3
System.out.println(num1); //输出4
System.out.println(++num2); //输出5
System.out.println(num2); //输出5
}
}
关系操作符
关系操作符:比较两个变量之间的关系
> 大于
>= 大于或等于
< 小于
<= 小于或等于
== 是否相等
!= 是否不等
package first;
public class Oneday{
public static void main(String[] args){
int i=5;
int j=4;
int t=5;
System.out.println(i>j);
System.out.println(i>=j);
System.out.println(i==j);
System.out.println(i!=j);
}
}
逻辑运算符
&
&& 长路与 和 短路与
|
|| 长路或 和 短路或
! 取反
^ 异或^
无论长路与还是短路与
两边的运算单元都是布尔值
都为真时,才为真;任意为假,就为假
区别
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了
package first;
public class Oneday{
public static void main(String[] args){
//长路与 无论第一个表达式的值是true或者false,第二个的值,都会被运算
int i=2;
System.out.println(i==1 & i++==2);//无论如何i++都会被执行,所以i的值变成了3
//短路与 只要第一个表达式的值是false的,第二个表达式的值,就不需要进行运算了
int j=2;
System.out.println(j==1 && j++==2);//因为j==1返回false,所以右边的j++就没有执行了,所以j的值,还是2
}
}
无论长路或还是短路或
两边的运算单元都是布尔值
都为假时,才为假
任意为真,就为真
区别
长路或 两侧都会被运算
短路或 只要第一个是true的,第二个就不进行运算了
public class HelloWorld {
public static void main(String[] args) {
//长路或 无论第一个表达式的值是true或者false,第二个的值,都会被运算
int i = 2;
System.out.println( i== 1 | i++ ==2 ); //无论如何i++都会被执行,所以i的值变成了3
System.out.println(i);
//短路或 只要第一个表达式的值是true的,第二个表达式的值,就不需要进行运算了
int j = 2;
System.out.println( j== 2 || j++ ==2 ); //因为j==2返回true,所以右边的j++就没有执行了,所以j的值,还是2
System.out.println(j);
}
}
取反!
真变为假
假变为真
package first;
public class Oneday{
public static void main(String[] args){
Boolean a=true;
System.out.println(a);
System.out.println(!a);
}
}
异或^
不同,返回真
相同,返回假
package first;
public class Oneday{
public static void main(String[] args){
Boolean a=true;
Boolean b=false;
System.out.println(a^b);
System.out.println(a^!b);
}
}
赋值操作
= 赋值操作
+= 对本身进行运算,并赋值
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
赋值操作
package first;
public class Oneday{
public static void main(String[] args){
int i=6+6; //赋值操作的操作顺序是从右到左,首先进行5+5的运算,得到结果10,然后把10这个值,赋给i
int j=0;
j+=1 //i+=2;等同于i=i+2; 先加在赋值
System.out.printf("%d,%d",i,j);
}
}
表达式?值1:值2
如果表达式为真 返回值1
如果表达式为假 返回值2
package first;
public class Oneday{
public static void main(String[] args){
int i=6;
int j=1;
int k=i<j?99:88;
System.out.printf("%d",k);
}
}
需要用到从控制台输入数据,所以需要用到Scanner类
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int i = s.nextInt();
System.out.println("读取的整数是"+ i);
float j=s.nextFloat();
System.out.printf("读取的浮点数是"+ j);
String rn = s.nextLine();
String a = s.nextLine();
System.out.println("读取的字符串是:"+a);
}
}
注意:
需要注意的是,如果在通过nextInt()读取了整数后,再接着读取字符串,读出来的是回车换行:"\r\n",因为nextInt仅仅读取数字信息,而不会读取回车换行"\r\n".
所以,如果在业务上需要读取了整数后,接着读取字符串,那么就应该连续执行两次nextLine(),第一次是取走回车换行,第二次才是读取真正的字符串
流程控制
顺序执行:所有程序都是从上到下依次执行。
分支执行:有选择执行程序语句。
常见结构:
1、 if(boolean 类型){
}
2、 if(){
}else{
}
3、 if(){
}else if(){
{
}else if()
{
}
4、 if(){
} else if(){
}else if(){
}
else{
}
他们之间可以循环嵌套使用。
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
int i=2;
if(i==1){
System.out.printf("%d",i);
}else if(i==2){
System.out.printf("%d",i);
}else{
System.out.printf("%的",i);
}
}
}
switch
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
int day = 5;
switch (day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("这个是什么鬼?");
}
}
}
循环执行:反复执行{ }内的程序;
常见执行方法:
for( 1 ;2 ;3 ){
}
for ()
内之要有 两个英文分号即可,其他都可以省略。
1号位置是循环体的起始位点,可以写在for()的上面,也可以写在for()的{ }里面之中。
2号位置是循环体的终点,判断循环体结束的条件。
3号位置是循环体起点向终点变化的形式。
while(){
}
如果()内的条件为真他则执行,否则会跳出循环体,通常在不知道循环次数的选择。
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
int i=0;
while(i<5){
System.out.printf("%d\n",i);
i++;
}
}
}
do{
}while();
循环体无条件的执行一次。
使用循环一般常见的选择有两种,一种为循环另一种为函数的递归使用。
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
int i=0;
do{
System.out.printf("%d\n",i);
i++;
}while(i<5);
}
}
循环嵌套
for(i=1;i<=10;i++){
for(i=1;i<=10;i++){
}
}
第一个循环体执行i=1是第二个循环体就执行10次。
第一个循环体执行i=2是第二个循环体就执行10次。
。。。。。。
循环体常见结束语句
break;
continue;
break;是结束整个循环语句。
continue;是结束循环体执行中一次的语句。
他们通常和 if(){ }
、for(; ;)
、while()
连用。
结束外部循环
方式一、标签法
for1: for(i=1;i<=10;i++){
for(i=1;i<=10;i++){
}
break for1;
}
终止第一个循环的全部。
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
//Scanner s=new Scanner(System.in);
//int i=s.nextInt();
int j = 1;
outloop:
for (int i = 1; i <= 10; i++) {
for (j=1;j<=10;j++){
System.out.printf("%d",j);
if(0==j%2){
break outloop;
}
}
}
}
}
使用boolean结束外部循环
package first;
import java.util.Scanner;
public class Oneday {
public static void main(String[] args) {
//Scanner s=new Scanner(System.in);
//int i=s.nextInt();
boolean a=false;
for (int i = 1; i <= 10; i++) {
for (int j=0;j<=10;j++){
System.out.printf("%d",j);
if(0==j%2){
a=true;
}
}
if(a){
break;
}
}
}
}
遍历数组、集合方面,foreach 为开发者提供了极大的方便。foreach 循环语句是 for 语句的特殊简化版本,主要用于执行遍历功能的循环。
for(int age : ages) {
//....
}
其中 int为数据类型,age为起的变量名,ages为数组名。
等价于
for(int i = 0; i < ages.lenth; i++) {
int age = ages[i];
//....
}