一 鍵盤錄入的基本格式
我們在初始使用Java階段發現給的值都是給死的,不靈活,而我們爲了讓程序的數據更符合開發的數據,這時候我們就需要用鍵盤錄入來實現它。 下來,我們說一下鍵盤錄入的基本格式。
1 導包
格式:
import java.util.Scanner;
位置:
在class上面。
2 創建鍵盤錄入對象
格式:
Scanner sc = new Scanner(System.in);
3 通過對象獲取數據
格式:
int x = sc.nextInt();
在IDEA中實際演示如下:
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個整數");
int i = sc.nextInt();
}
}
我們也可以做一些鍵盤錄入的案例來演示一下,例如比較三個數據的最大值:
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要比較的數");
int i = sc.nextInt();
Scanner sc1 = new Scanner(System.in);
System.out.println("請輸入你要比較的數");
int j= sc.nextInt();
Scanner sc2 = new Scanner(System.in);
System.out.println("請輸入你要比較的數");
int a = sc.nextInt();
int max= (i>j)?i:j;
int max1=(max>a)?max:a;
System.out.println("三個數的最大值是"+max1);
}
二 流程控制語句
1 順序結構語句
1 在一個程序執行的過程中,各條語句的執行順序對程序的結果是有直接影響的。也就是說,程序的流程對運行結果 有直接的影響。所以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實現 我們要完成的功能。
2 流程控制語句分爲 順序結構 選擇結構和循環結構三種
3 我們首先來了解的順序結構語句是程序中最簡單的最基本的流程控制,沒有特定的語法結構
通俗來說 就是前面的先執行,後面的後執行 從上往下 依次執行
2 選擇結構語句
選擇結構 也被稱爲分支結構,不同於順序結構而言,選擇結構有特定的語法規則,代碼要執行具體的邏輯運算進行判斷,邏輯運算的結果有兩個,所以產生選擇,按照不同的選擇執行不同的代碼。
選擇結構分爲if語句和switch語句兩種
(1)我們首先來談if語句
1 if 語句的三種格式
(1)if(比較表達式或者是boolean類型的值){
語句體;
}
執行流程:
先計算表達式中的值,看看返回的值是true還是false,如果是true,就執行語句體,如果是false,就不執行。
我們來演示一下
public class Mydemo1 {
public static void main(String[] args) {
if(2>1){
System.out.println("語句體運行了");
}
}
}
(2)if(比較表達式){
語句體1;
}else{
語句體2;
}
注意事項:else後面沒有表達式,只有if後面有。
執行流程:
先計算表達式中的值,看看返回的值是true還是false,如果是true,就執行語句體1,如果是false,就執行語句體2。
我們來演示一下
public class Mydemo1 {
public static void main(String[] args) {
if(2>1){
System.out.println("語句體1運行了");
}
else{
System.out.println("語句體2運行了");
}
}
}
我們也可以結合上面的鍵盤錄入來判斷一個數是奇數還是偶數
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("請輸入一個數字");
int i = scanner1.nextInt();
if(i%2==0){
System.out.println("這個數字是偶數");
}
else{
System.out.println("這個數字是奇數");
}
}
}
(3)if(比較表達式1) {
語句體1;
}else if(比較表達式2) {
語句體2;
}else if(比較表達式3) {
語句體3;
}
…
else {
語句體n+1;
}
2 執行流程:
先計算比較表達式1中的值,看看返回的值是true還是false,如果是true,就執行語句體1,if語句結束。如果是false,就接着計算比較表達式2看其返回值是true還是false,如果是true,就執行比較表達式2,if語句結束。如果是false,就接着計算比較表達式3看其返回值是true還是false,就這樣一直循環,如果都是false ,就執行語句體 n+1。
注意事項:當只有一個條件滿足時,if語句結束。else是可以省略,但是不建議省略。
我們通過一個案例來演示一下
鍵盤錄入一個成績並判斷出輸出成績的等級
90-100優秀
70-90 良好
60-70 及格
0-60 不及格
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("請輸入你的成績");
int i = scanner1.nextInt();
if(i>=90&&i<=100){
System.out.println("優秀");
}
else if(i>=70&&i<90){
System.out.println("良好");
}
else if(i>=60&&i<70){
System.out.println("及格");
}
else if(i>=0&&i<60){
System.out.println("不及格");
}
else{
System.out.println("你輸入的成績有誤");
}
}
}
3 if語句的嵌套使用
我們在遇到一些問題的時候 ,有時候一次比較並不能獲取想得要的效果,這時候我們可以嵌套使用if來得到預期的效果,我們通過一個案例來演示一下
獲取三個數據中的最大值
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("請輸入需要比較的數字1");
double i= scanner1.nextDouble();
Scanner scanner2 = new Scanner(System.in);
System.out.println("請輸入需要比較的數字2");
double j =scanner2.nextDouble();
Scanner scanner3 = new Scanner(System.in);
System.out.println("請輸入需要比較的數字3");
double a = scanner3.nextDouble();
double max;double max1;
if(i>j){
max=i;
}else{
max=j;
}
if(max>a){
max1=max;
}else{
max1=a;
}
System.out.println("這三個數的最大值是"+max1);
}
}
4 if語句使用時的注意事項
(1)比較表達式無論簡單還是複雜,結果必須是boolean類型
(2)if語句控制的語句體如果是一條語句,大括號可以省略;如果是多條語句,就不能省略。建議永遠不要省略。
(3)一般來說:有左大括號就沒有分號,有分號就沒有左大括號
(2)switch結構語句
1 首先,我們瞭解一下switch語句的格式:
switch(表達式){
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
case 值3:
語句體3;
break;
…
default:
語句體n+1;
break;
}
2 對switch語句的格式加以解釋
(1):switch表示這是switch語句
表達式的取值:byte,short,int,char
JDK5以後可以是枚舉(什麼是枚舉,以後再講)
JDK7以後可以是String
(2):case後面跟的是要和表達式進行比較的值
(3):語句體部分可以是一條或多條語句
(4):break表示中斷,結束的意思,可以結束switch語句
(5):default語句表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似
3 switch語句的執行流程:
先計算表達式的值,然後和case後面的匹配,如果匹配成功就執行對應語句,遇到break就會結束,否則執行default控制的語句
4 在面試的時候 也有一些關於switch表達式取值的問題
比如 byte,long,String 可以作爲switch的表達式嗎?
switch的數據類型跟版本是有關係的:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int;從Java 5開始,Java中引入了枚舉類型,expr也可以是enum類型;從Java 7開始,expr還可以是字符串(String),但是長整型(long)在目前所有的版本中都是不可以的。
5 switch語句的基本使用
我們用一個案例來了解一下
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入今天是這周的第幾天");
int i = scanner.nextInt();
switch (i){
case 1:
System.out.println("星期一");break;
case 2:
System.out.println("星期二");break;
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("你輸入的值有誤");break;
}
}
}
6 switch語句的注意事項
(1):case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的值
(2):default可以省略嗎?
可以省略,但是不建議,因爲它的作用是對不正確的情況給出提示。
(3):break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透。
最終我們建議不要省略
(4):default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
(5):switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
(3)if語句和switch語句的區別
我們通過一個案列來演示一下
分別用switch語句和if語句來實驗鍵盤錄入月份然後輸出對應的季節
switch語句的演示如下
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入月份");
int i = scanner.nextInt();
switch (i){
case 1:
System.out.println("Winter");break;
case 2:
System.out.println("Winter");break;
case 3:
System.out.println("Spring");break;
case 4:
System.out.println("Spring");break;
case 5:
System.out.println("Spring");break;
case 6:
System.out.println("Summer");break;
case 7:
System.out.println("Summer");break;
case 8:
System.out.println("Summer");break;
case 9:
System.out.println("Fall");break;
case 10:
System.out.println("Fall");break;
case 11:
System.out.println("Fall");break;
case 12:
System.out.println("Winter");break;
default:
System.out.println("你輸入的值有誤");break;
}
}
}
if語句的演示如下
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入月份,範圍1-12");
int i = scanner.nextInt();
if(i==12||i==1||i==2){
System.out.println("Winter");
}
else if(i==3||i==4||i==5){
System.out.println("Spring");
}
else if(i==6||i==7||i==8){
System.out.println("Summer");
}
else if(i==9||i==10||i==11){
System.out.println("fall");
}else {
System.out.println("你輸入的值不在範圍內");
}
}
}
什麼時候我們需要用if語句,什麼時候我們需要用switch語句呢?
if語句使用場景:
針對結果是boolean類型的判斷
針對一個範圍的判斷
針對幾個常量值的判斷
switch語句使用場景:
針對幾個常量值的判斷
3 循環結構語句
在我們使用代碼來達到預期效果的時候,有時候一些代碼需要重複利用,如果我們使用順序結構語句,也可以,但是會很繁瑣,特別如果代碼是上萬行,特別麻煩,這時候我們可以考慮讓這段代碼反覆執行,這段被重複執行的代碼就叫做循環語句體,這個語句,就叫做循環結構語句。
循環結構語句主要分爲 for循環和while循環兩種
(1)for循環
1 for循環的格式
for(初始化表達式語句;判斷條件語句;控制條件語句) {
循環體語句;
}
2 for循環的執行流程
(1):執行初始化表達式語句
(2):執行判斷條件語句,看其返回值是true還是false
如果是true,就繼續執行
如果是false,就結束循環
(3):執行循環體語句;
(4):執行控制條件語句
(5):回到B繼續。
3 注意事項:
(1)初始化表達式語句只執行一次
(2)判斷條件語句無論簡單還是複雜結果是boolean類型。
(3)循環體語句如果是一條語句,大括號可以省略;如果是多條語句,大括號不能省略。建議永遠不要省略。
(4)一般來說:有左大括號就沒有分號,有分號就沒有左大括號
4 我們通過幾個案例演示一下for循環語句的獲取數據
(1)控制檯輸出數據1-10
public class Mydemo1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
(2)控制檯輸出數據10-1
public class Mydemo1 {
public static void main(String[] args) {
for (int i = 10; i >0; i--) {
System.out.println(i);
}
}
}
5 我們通過幾個案例來演示一下for語句的求和思想
(1)求出1-10之間數據的和
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=10; i++) {
sum+=i;
}
System.out.println(sum);
}
}
(2)求出1-100的偶數和`
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=100; i++) {
if(i%2==0) {
sum += i;
}
}
System.out.println(sum);
}
}
(3)求出1-100的奇數和
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=100; i++) {
if(i%2!=0) {
sum += i;
}
}
System.out.println(sum);
}
}
6 如何用for循環來求水仙花數並且如何統計水仙花數出現的次數
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
int j=0;
for (int i = 100; i < 1000; i++) {
int i1=(i/10/10%10);
int i2=(i/10%10);
int i3=(i%10);
if(i1*i1*i1+i2*i2*i2+i3*i3*i3==i){
j++;
System.out.println("水仙花數有"+i);
}
} System.out.println("共有"+j+"個水仙花數");
}
}
(2)while循環
1 while循環的格式
(1)基本格式:
while(判斷條件語句) {
循環體語句;
}
(2)完整格式:
初始化條件語句;
while(判斷條件語句) {
循環體語句;
控制條件語句;
}
2 執行流程
(1)執行初始化條件語句;
(2)執行判斷條件語句,看其返回值是true還是false
如果是true,就繼續執行
如果是false,就結束循環
(3)執行循環體語句;
(4)執行控制條件語句
(5)回到b繼續。
3 我們通過兩個案例演示一下while循環的統計思想和求和思想
(1) 統計思想:統計水仙花數有多少個
public class Mydemo1 {
public static void main(String[] args) {
int j = 0;int i=100;
while(i<1000){
int i1 = (i / 10 / 10 % 10);
int i2 = (i / 10 % 10);
int i3 = (i % 10);
if(i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3 == i) {
j++;
System.out.println("水仙花數有" + i);
}
i++;
}
System.out.println("共有" + j + "個水仙花數");
}
}
(2)求和思想:求1-100的和
public class Mydemo1 {
public static void main(String[] args) {
int i=1;int sum=0;
while(i<=100){
sum+=i;i++;
}
System.out.println(sum);
}
}
(3)do…whlie循環
1 do…while的格式:
do {
循環體語句;
}while(判斷條件語句);
完整格式;
初始化條件語句;
do {
循環體語句;
控制條件語句;
}while(判斷條件語句);
2 執行流程
(1)執行初始化條件語句;
(2)執行循環體語句;
(3)執行控制條件語句;
(4)執行判斷條件語句,看其返回值是true還是false
如果是true,就繼續執行
如果是false,就結束循環
(5)回到b繼續。
3 我們通過一個案例來演示下do…while語句
再控制檯輸出1-10
public class Mydemo1 {
public static void main(String[] args) {
int i=1;
do{
System.out.println(i);
i++;
}
while(i<=10);
}
}
(4)循環結構三種循環語句的區別及注意事項死循環
1 三種循環語句的區別
(1):do…while循環至少執行一次循環體。
而for,while循環必須先判斷條件是否成立,然後決定是否執行循環體語句。
(2):A: 如果你想在循環結束後,繼續使用控制條件的那個變量,用while循環,否則用for循環。不知道用for循環。
因爲變量及早的從內存中消失,可以提高內存的使用效率。
B:建議優先考慮for循環,然後是while循環 ,最後是do…while循環
2 死循環的注意事項
(1)一定要注意控制條件語句控制的那個變量的問題,不要弄丟了,否則就容易死循環。
(2)兩種最簡單的死循環格式
while(true){…}
for(;😉{…}
(5)通過幾個案例來熟悉循環結構的嵌套
1 請輸出一個4行5列的星星(*)圖案。
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j < 5; j++) {
for (int i = 1; i < 5; i++) {
System.out.print("*");
}
System.out.println("*");
}
}
}
2 請輸出下列的形狀
*
**
***
****
*****
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j < 6; j++) {
for (int i = 1; i < 5; i++) {if(i<j){
System.out.print("*");}
}
System.out.println("*");
}
}
}
3 在控制檯輸出九九乘法表
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= 9; i++) {if(i<=j){
System.out.print(i+"*"+j+"="+i*j+"\t");}
}
System.out.println();
}
}
}