運(yùn)算符:對(duì)常量和變量進(jìn)行操作的符號(hào)
常用的幾類運(yùn)算符:
1.賦值運(yùn)算符:=
2.算術(shù)運(yùn)算符:+ - * / %
3.比較(關(guān)系)運(yùn)算符:> < >= <= == !=
4.邏輯運(yùn)算符:&&(雙與) ||(雙或) &(單與) |(單或) !(非)
5.一元運(yùn)算符:++(自增) --(自減)
6.三元運(yùn)算符:表達(dá)式1:表達(dá)式2?值1:值2;如果表達(dá)式為true則取值1,為false則取值2
1.賦值運(yùn)算符(=):將右邊的值賦給左邊的變量
int a=10;
int b=a;(復(fù)制)
a=20;(覆蓋)
2.算術(shù)運(yùn)算符(+ - * / %)
-
加法/拼接 +
一:+:兩種用法
1:進(jìn)行加法運(yùn)算;2具有拼接功能
二:+進(jìn)行拼接應(yīng)該應(yīng)該具備的要求:
要求1:必須要有字符串參與運(yùn)算,如果沒(méi)有字符串參與,則直接做加法運(yùn)算
要求2:字符串在右邊的時(shí)候,先要進(jìn)行其它的數(shù)據(jù)的加法運(yùn)算,然后再與字符串進(jìn)行拼接,而最終的結(jié)果也是字符串!
三:實(shí)例說(shuō)明
//字符串拼接
System.out.println(1+"哈哈"); //"1哈哈"
//要求1:必須要有字符串參與運(yùn)算
//要求2:只有當(dāng)字符串在右邊的時(shí)候,先要進(jìn)行其他數(shù)據(jù)的加法運(yùn)算,然后再與字符串進(jìn)行拼接
//要求2:字符串的右邊不管有多少個(gè)+,都是進(jìn)行字符串的連接,而左邊進(jìn)行加法運(yùn)算
System.out.println(1+"2"); //12
System.out.println(1+2+"3"); //33
System.out.println(1+"2"+3); //123
System.out.println(1+"2"+3+4); //1234
System.out.println("3+3="+3+3); //3+3=33
System.out.println(1+2+3+4+5+6+7); //28
System.out.println(1+"2"+3+4+5+6+7); //1234567
System.out.println(1+2+3+"4"+5+6+7); //64567
-
取商 /
結(jié)論1:如果/左右兩邊都是整數(shù),那么得到的結(jié)果也是整數(shù)
結(jié)論2:如果/左右兩邊只要有一個(gè)是小數(shù),那么得到的結(jié)果就是小數(shù)
結(jié)論3:如果被除數(shù)為0,那么結(jié)果也為0
結(jié)論4:如果除數(shù)為0,那么直接會(huì)報(bào)錯(cuò)(ArithmeticException)算術(shù)異常
實(shí)例說(shuō)明:
System.out.println(5/2); //2
System.out.println(5.0/2); //2.5
System.out.println(5/2.0); //2.5
System.out.println(0/2); //0
System.out.println(0/2.0); //0.0
//System.out.println(5/0); //ArithmeticException(算術(shù)異常)
* System.out.println(2/5); //0
-
取模 %
// %取余和取商的用法基本一致,但是有一點(diǎn)不一樣,當(dāng)左邊比右邊小的時(shí)候,除得到的結(jié)果是0,而模得到的結(jié)果是左邊本身
System.out.println(5%2); //1
System.out.println(5.0%2); //1.0
System.out.println(5%2.0); //1.0
System.out.println(0%2); //0
System.out.println(0%2.0); //0.0
* System.out.println(2%5); //2
-
減法-和乘法:和數(shù)學(xué)中的用法一致,但是必須是數(shù)字參與運(yùn)算
需求:求1234的個(gè)十百千位
思路:使用上述算術(shù)運(yùn)算符中的取余和取模(Remember)
int a=1234;
int ge=a/1%10; // %10得到的是最后的位數(shù)4
int shi=a/10%10; // /10是將1234的4去掉了,a=123,接著%10得到最后的位數(shù)3
int bai=a/100%10; // /100是將1234的34去掉了,a=12,接著%10得到最后的位數(shù)2
int qian=a/1000%10; // /1000是將1234的234去掉了,a=1,接著%10得到最后的位數(shù)1
3.比較運(yùn)算符(> < >= <= == !=):最終得到的結(jié)果是Boolean類型,要么是true,要么是false。
實(shí)例說(shuō)明:
System.out.println(5>3); //true
System.out.println(5<3); //false
System.out.println(5>=3); //true
System.out.println(5!=3); //true
特別注意:
//==是比較運(yùn)算符,用于判斷基本數(shù)據(jù)類型的值是否相等
System.out.println(5==5);
// System.out.println(5=5); //意外的類型,"="是賦值,而"=="才是比較
4.邏輯運(yùn)算符:&&(雙與) ||(雙或) &(單與) |(單或) !(非)
作用:用來(lái)連接條件用的
實(shí)例說(shuō)明:
System.out.println(5>3&&5>7); //false
System.out.println(5>3||5>7); //true
System.out.println(!(5>3)); //false
面試題:雙與,雙或和單與,單或的區(qū)別是什么??
雙與和單與都是并且的含義,雙或和單或都是或者的含義,但是雙與和雙或有短路效果
解釋:什么是短路效果:假如有成百上千個(gè)條件給我們?nèi)ヅ袛啵? 當(dāng)我們使用&&的時(shí)候,判斷到一個(gè)條件是false,那么就不需要要繼續(xù)判斷下面的條件是否是true/false,最終的結(jié)果一定是false
而當(dāng)我們使用&的時(shí)候,如果判斷一個(gè)條件為false,我們還要接著判斷下面所有的條件,當(dāng)所有的條件判斷完之后才出結(jié)果
所以:雙與,雙或相對(duì)于單與,單或而言,縮短了運(yùn)行時(shí)間,提高了程序的運(yùn)行效率,這在實(shí)際編程開(kāi)發(fā)過(guò)程中是很有用的
拓展:那么&和|是不是就沒(méi)用了呢? 從本質(zhì)上而言是的,&&是&的一個(gè)升級(jí)版本,但是還有一個(gè)區(qū)別就是&和|可以用來(lái)作位運(yùn)算,而&&和||就不行*/
5.一元運(yùn)算符: ++(自增) --(自減),用來(lái)操作一個(gè)變量用的
//當(dāng)++和--單獨(dú)使用的時(shí)候,放在前面和后面沒(méi)有區(qū)別
實(shí)例說(shuō)明:
/*int a=1;
a++;
System.out.println(a);*/
//當(dāng)++和--參與運(yùn)算的時(shí)候,就有很大的區(qū)別了
//i++:變量先參與運(yùn)算,然后再自增
//++i:變量先要自增1,然后再參與運(yùn)算
//i--:變量先參與運(yùn)算,然后再自減
//--i:變量先要自減1,然后再參與運(yùn)算
實(shí)例說(shuō)明:
int a1=1;
System.out.println(a1); //1
System.out.println(a1++); //運(yùn)算并不止局限于+-*/,輸出同樣屬于運(yùn)算 //1 i++
System.out.println(a1); //這時(shí)a1=2 //2
System.out.println(++a1); //這時(shí)先自增,然后輸出 //3 ++i
System.out.println(a1); //3
System.out.println(a1--); //3 i--
System.out.println(a1); //2
System.out.println(--a1); //1 --i
System.out.println(a1); //1
//運(yùn)算與自增
int a2=1;
int b=a2++;
System.out.println(a2); //2 先計(jì)算b=a2
System.out.println(b); //1
//輸出綜合
int c=1;
int d=(c++)+2-(++c)+(c--)+3-(--c);
System.out.println(d);
6.三元運(yùn)算符
表達(dá)式1:表達(dá)式2?值1:值2;如果表達(dá)式為true則取值1,為false則取值2
實(shí)例說(shuō)明:求兩個(gè)數(shù)的最大值
int a=10;
int b=20;
int max=a>b?a:b; //20
boolean flag=a>b?true:false; //false
流程控制語(yǔ)句
//1.單個(gè)的if語(yǔ)句結(jié)構(gòu)
/* 單個(gè)if語(yǔ)句的特點(diǎn)
1.一次只能判斷一個(gè)條件
2.單個(gè)的if語(yǔ)句都是互相獨(dú)立的,互不影響
*/
int age0=22;
if(age0>=22){
System.out.println("恭喜你,可以結(jié)婚了");
}
if(age0<=22){
System.out.println("只能老老實(shí)實(shí)敲代碼!");
}
//2.if else語(yǔ)句結(jié)構(gòu)
/* if..else語(yǔ)句的特點(diǎn)
1.同時(shí)進(jìn)行兩個(gè)條件判斷
2.else后面隱含了一個(gè)與條件相反的條件
*/
int age1=20;
if(age1>=22){
System.out.println("恭喜你,可以結(jié)婚了");
}else{
//else隱含了一個(gè)與條件判斷相反的條件
//滿足age<22做的事情
System.out.println("只能老老實(shí)實(shí)敲代碼!");
}
//if語(yǔ)句的第三種格式:多重if
//給定一個(gè)人的成績(jī),判斷此人的成績(jī)的等級(jí) 成績(jī)只能夠0--100
int score=95;
if(score>=0&&score<60){
System.out.println("沒(méi)及格,小伙子還需要加油??!");
}else if(score>=60&&score<70){ //隱含了上一層的條件
System.out.println("及格,小伙子挺危險(xiǎn),還需努力");
}else if(score>=70&&score<80){ //隱含了上一層的條件,但是上一層的條件隱含了上上一層的條件,所以隱含了上兩層的條件
System.out.println("良,小伙子還算不錯(cuò)");
}else if(score>=80&&score<90){
System.out.println("優(yōu),小伙子考的還行");
}else{
System.out.println("小伙子你要上天啊,真乃人中之龍也!");
}
//總結(jié): 因?yàn)槿绻嘀豬f語(yǔ)句如果滿足條件則不必須繼續(xù)執(zhí)行下去,
而if..else語(yǔ)句如果if的條件滿足則不必要執(zhí)行else語(yǔ)句中的內(nèi)容,
而單個(gè)的if語(yǔ)句,如果滿足了if條件,還需要繼續(xù)執(zhí)行下一個(gè)if,只到所有的if全部執(zhí)行完。
//最后:多重if語(yǔ)句比if..else語(yǔ)句效率要高,而if..else比單個(gè)的if語(yǔ)句執(zhí)行效率要高
掃描器(鍵盤(pán)錄入)Scanner
作用:通過(guò)掃描器接收自己輸入的數(shù)據(jù),實(shí)現(xiàn)人機(jī)交互
步驟(三步走):
第1步:導(dǎo)入掃描器(特定的代碼)
//import java.util.Scanner;(第一種寫(xiě)法,必須寫(xiě)在真正代碼的第一行,注釋不算)
//import java.util.*;(第二種寫(xiě)法)
第2步:生成新的掃描器
Scanner sc=new Scanner(System.in); //只需要寫(xiě)一次,下面如果有多次輸入,不必重復(fù)定義
第3步:接收數(shù)據(jù)
//3.1接收輸入的整數(shù)
//最好要一個(gè)友好提示:請(qǐng)輸入一個(gè)xx類型的數(shù)據(jù)
System.out.print("請(qǐng)輸入一個(gè)int類型的數(shù)據(jù):");
int a=sc.nextInt();
System.out.println("輸入的整形數(shù)據(jù):"+a);
//3.2接收double類型的數(shù)據(jù)
/* System.out.print("請(qǐng)輸入一個(gè)double類型的數(shù)據(jù):");
double b=sc.nextDouble();
System.out.println("輸入的double類型的數(shù)據(jù):"+b);*/
//3.3第一種接收String類型的數(shù)據(jù)nextLine()
/*System.out.print("請(qǐng)輸入一個(gè)string類型的數(shù)據(jù):");
String c=sc.nextLine();
System.out.println("輸入的string類型的數(shù)據(jù):"+c);*/
//3.4第二種接收String類型的數(shù)據(jù)next();
System.out.print("請(qǐng)輸入一個(gè)string類型的數(shù)據(jù):");
String d=sc.next();
System.out.println("輸入的string類型的數(shù)據(jù):"+d);
//3.5接收Boolean類型的數(shù)據(jù)
System.out.print("請(qǐng)輸入一個(gè)boolean類型的數(shù)據(jù):");
Boolean e=sc.nextBoolean();
System.out.println("輸入的boolean類型的數(shù)據(jù):"+e);
需求:請(qǐng)輸入3個(gè)int類型的數(shù)據(jù),判斷最大值,只允許用單個(gè)if語(yǔ)句
思路:打擂臺(tái),先從三個(gè)人中找一個(gè)人當(dāng)擂主,然后去第二個(gè)人去挑戰(zhàn)擂主,如果贏,第二個(gè)人就成為擂主,如果輸,第一個(gè)人還是擂主。然后第三個(gè)人接著去挑戰(zhàn)擂主,如果贏,第三個(gè)人就成為擂主,如果輸,擂主還是擂主??!
import java.util.*;
public class Demo_Max {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入第一個(gè)數(shù)據(jù):");
int a=sc.nextInt();
System.out.println("請(qǐng)輸入第二個(gè)數(shù)據(jù):");
int b=sc.nextInt();
System.out.println("請(qǐng)輸入第三個(gè)數(shù)據(jù):");
int c=sc.nextInt();
int max=a;
if(max<b){
max=b;
}
if(max<c){
max=c;
}
System.out.println("max的值為"+max);
}
}
課后習(xí)題練習(xí):
package com.HomeWork;
/*1.定義三個(gè)變量,保存名字,性別,年齡, 愛(ài)好
提示:
姓名: 自己定義
性別: 自己定義
年齡: 自己定義
愛(ài)好: 自己定義
輸出格式:(舉列如下)
姓名 性別 年齡 愛(ài)好
a b c d*/
public class Hw1 {
public static void main(String[] args) {
String name="張三";
String sex="男";
int age=18;
String hobby="籃球";
System.out.println("姓名\t性別\t年齡\t愛(ài)好");
System.out.println(name+"\t"+sex+"\t\t"+age+"\t\t"+hobby);
}
}
package com.HomeWork;
/*2、根據(jù)天數(shù)(46)計(jì)算周數(shù)和剩余的天數(shù)*/
public class Hw2 {
public static void main(String[] args) {
int day=46;
int week;
int diethday;
week=day/7;
diethday=day%7;
System.out.println("周數(shù)為:"+week);
System.out.println("剩余天數(shù):"+diethday);
}
}
package com.HomeWork;
/*3.定義的整數(shù)142857,
把這個(gè)數(shù)字分解成兩組數(shù)字142,857
計(jì)算這兩個(gè)數(shù)和的結(jié)果;
再把142857分解成三組數(shù)字,
14,28,57再輸出三組數(shù)字之和*/
public class Hw3 {
public static void main(String[] args) {
int a=142857;
int num1;
int num2;
int sum1,sum2;
num1=a/1000;
num2=a%1000;
System.out.println("num1="+num1);
System.out.println("num2="+num2);
sum1=num1+num2;
System.out.println("sum1="+sum1);
int num3;
int num4;
int num5;
num3=a/10000;
num4=a%10000/100;
num5=a%100;
System.out.println("num3="+num3);
System.out.println("num4="+num4);
System.out.println("num5="+num5);
sum2=num3+num4+num5;
System.out.println("sum2="+sum2);
}
}
package com.HomeWork;
/*4.定義一個(gè)整數(shù),代表88個(gè)小時(shí),
計(jì)算88個(gè)小時(shí)等于多少天零多少個(gè)小時(shí)*/
public class Hw4 {
public static void main(String[] args) {
int num=88;
int day;
int hour;
day=num/24;
hour=num%24;
System.out.println("88小時(shí)是"+day+"天");
System.out.println("剩余:"+hour+"h");
}
}
package com.HomeWork;
/*5.定義一個(gè)整形變量比如:int a = 12345;然后依次輸出各個(gè)位上的數(shù)字;*/
public class Hw5 {
public static void main(String[] args) {
int a=12345;
int ge,shi,bai,qian,wan;
ge=a/1%10;
shi=a/10%10;
bai=a/100%10;
qian=a/1000%10;
wan=a/10000%10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
System.out.println(qian);
System.out.println(wan);
}
}
package com.HomeWork;
/* 6.某個(gè)公司采用公用電話傳遞數(shù)據(jù),
數(shù)據(jù)是四位的整數(shù),在傳遞過(guò)程中是加密的,
加密規(guī)則如下:求出各個(gè)位數(shù)的數(shù)字,再將第一位和第四位交換,第二位和第三位交換。
請(qǐng)給數(shù)字(4567)加密。*/
public class Hw6 {
public static void main(String[] args) {
int num=4567;
System.out.println("加密前num="+num);
int ge,shi,bai,qian;
ge=num/1%10;
shi=num/10%10;
bai=num/100%10;
qian=num/1000%10;
int a;
a=ge;
ge=qian;
qian=a;
a=shi;
shi=bai;
bai=a;
int numember=qian*1000+bai*100+shi*10+ge*1;
System.out.println("加密后num="+numember);
}
}
package com.HomeWork;
/*7、鍵盤(pán)輸入一個(gè)int型的數(shù)據(jù),判斷這個(gè)數(shù)是
否能被2整除,如果能被2整除,
那么輸出“這個(gè)數(shù)是偶數(shù)”,
如果不能被2整除,輸出“這個(gè)數(shù)是奇數(shù)”。
提示:8%2==0 10%2==0 9%2=1
*/
import java.util.*;
public class Hw7 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)int類型的數(shù)據(jù):");
int num=sc.nextInt();
if(num%2==0){
System.out.println("這個(gè)數(shù)是偶數(shù)");
}else{
System.out.println("這個(gè)數(shù)是奇數(shù)");
}
}
}
package com.HomeWork;
/*8.鍵盤(pán)錄入兩個(gè)整數(shù),計(jì)算他們的和,如果和大于100,
就輸出這兩個(gè)數(shù)的乘積,如果和小于100,
就輸出這兩個(gè)數(shù)的商.*/
import java.util.*;
public class Hw8 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入第一個(gè)整數(shù):");
double num1=sc.nextDouble();
System.out.println("請(qǐng)輸入第二個(gè)整數(shù):");
double num2=sc.nextDouble();
double sum=num1+num2;
if(sum>100){
System.out.println(num1*num2);
}else{
if(num1>num2){
System.out.println(num1/num2);
}else {
System.out.println(num2/num1);
}
}
}
}
package com.HomeWork;
/*9.鍵盤(pán)錄入三個(gè)int類型的數(shù)字
2.要求:
(1)求出三個(gè)數(shù)中的最小值值并打印
(2)求出三個(gè)數(shù)的和并打印
*/
import java.util.*;
public class Hw9 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請(qǐng)輸入第一個(gè)數(shù):");
int num1=sc.nextInt();
System.out.println("請(qǐng)輸入第二個(gè)數(shù):");
int num2=sc.nextInt();
System.out.println("請(qǐng)輸入第三個(gè)數(shù):");
int num3=sc.nextInt();
int min=num1;
if(min>num2){
min=num2;
}
if(min>num3){
min=num3;
}
System.out.println("三個(gè)數(shù)中的最小數(shù)為:"+min);
int sum=num1+num2+num3;
System.out.println("三個(gè)數(shù)的和為:"+sum);
}
}