Java流程控制
1.用戶互動Scanner
java.util.Scanner是Java5的新特征,我們可以通過Scannner類來獲取用戶的輸入,
基本語法:
Scanner s = new Scanner(System.in);
-
通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前一般需要使用hasNext()與hasNextLine()判斷是否還有輸入的資料,
1.1Scanner物件
-
next()
-
一定要讀取到有效字符后才可以結束輸入
-
對輸入有效字符之前遇到的空白,next()方法會自動將其去掉
-
只有輸入有效字符后才能將其后面輸入的空白作為分隔符或者結束符
-
next()不能得到帶有空格的字串
-
nextLine()
-
nextLine()是以Enter(回車)作為結束符,也就是說nextLine()方法回傳的是輸入回車之前的所有字符
-
可以獲取空白
例子1
package li.bolog.scanner;
?
import java.util.Scanner;
?
public class Demo01 {
public static void main(String[] args) {
//創建一個掃描器物件,用于接收鍵盤資料
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
?
//判斷用戶有沒有輸入字串
if(scanner.hasNext()){
String str = scanner.next();//程式會等待用戶輸入完畢
System.out.println("輸入的內容為:"+str);
}
?
//凡是屬于IO流的類如果不關倍訓一直占用資源,要養成好習慣用完就關掉,
scanner.close();
}
}

例子2
package li.bolog.scanner;
?
import java.sql.SQLOutput;
import java.util.Scanner;
?
public class Demo02 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
?
System.out.println("使用nextLine方式接收:");
?
//判斷是否還有輸入
if (scanner.hasNextLine()){
//使用nextLine方式接收
String str=scanner.nextLine();
System.out.println("輸入的內容為:"+str);
}
?
scanner.close();
}
}

例子3
package li.bolog.scanner;
?
import java.util.Scanner;
?
public class Demo03 {
public static void main(String[] args) {
?
Scanner scanner = new Scanner(System.in);
?
System.out.println("請輸入資料:");
?
String str = scanner.nextLine();
?
System.out.println("輸出的內容為:"+str);
?
scanner.close();
}
}

1.2Scanner進階使用
例子4
package li.bolog.scanner;
?
import java.util.Scanner;
?
public class Demo05 {
public static void main(String[] args) {
//我們可以輸入多個數字,并求其總和與平均數,每輸入一個數字用回車鍵確認,通過輸入非數字來結束輸入并輸出執行結果,
Scanner scanner = new Scanner(System.in);
?
//和
double sum = 0;
//計算輸入了多少個數字
int m = 0;
System.out.println("請輸入資料:");
//通過回圈判斷是否還有數字輸入,并在里面對每一次進行求和和統計
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
m=m+1;
sum=sum+x;
?
System.out.println("你輸入了第"+m+"個資料,當前結果sum="+sum);
}
System.out.println(m+"個數的和為:"+sum);
System.out.println(m+"個數的平均數為:"+(sum/m));
scanner.close();
}
}

2.順序結構
-
Java的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行
-
順序結構是最簡單的演算法結構
-
陳述句與陳述句之間,框與框之間是按照從上到下的順序進行的,它是由若干個一次執行的處理步驟組成的,它是任何一個演算法都離不開的一種基本的演算法結構,
3.選擇結構
3.1if單選擇結構
-
我們很多時候需要去判斷一個東西是否可行再去執行,這樣一個程序在程式中用if陳述句來表示,
語法:
if(布爾運算式){
//這里是如果布爾運算式為true,則將執行的陳述句
}
例子
package li.bolog.struct;
?
import java.util.Scanner;
?
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
?
System.out.println("請輸入內容:");
String s= scanner.nextLine();
?
//equals:判斷字串是否相等
if(s.equals("Hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}


3.2if雙選擇結構
語法:
if(布爾運算式){
//這里是如果布爾運算式為true則將執行的陳述句
}else{
//這里是布爾運算式為false則將執行的陳述句
}
例子
package li.bolog.struct;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
//考試成績大于60分則及格,否則不及格
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if(score>=60){
System.out.println("成績及格!");
}else{
System.out.println("成績不及格!");
}
scanner.close();
}
}

3.3if多選擇結構
語法:
if(布爾運算式1){
//這里是如果布爾運算式1為true則將執行的陳述句
}else if(布爾運算式2){
//這里是如果布爾運算式2為true則將執行的陳述句
}else if(布爾運算式3){
//這里是如果布爾運算式3為true則將執行的陳述句
}...else{
//如果以上布爾表達都不為true則執行這里的代碼
}
if陳述句至多有一個else陳述句,else陳述句在所有的else if陳述句之后
if陳述句可以有若干個else if 陳述句,它們必須在else陳述句之前
一旦其中一個else if陳述句檢測為true,其他的else if以及else陳述句都將跳過
例子
package li.bolog.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
//考試成績大于60分則及格,否則不及格
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if(score==100){
System.out.println("成績滿分!");
}else if(score<100&&score >=90){
System.out.println("成績:A");
}else if(score<90&&score >=80){
System.out.println("成績:B");
} else if(score<80&&score >=70){
System.out.println("成績:C");
} else if(score<70&&score >=60){
System.out.println("成績:D");
}else if(score<60&&score>=0){
System.out.println("成績不合格!");
}else{
System.out.println("成績非法!");
}
scanner.close();
}
}

3.4嵌套的if結構
使用嵌套的if…else陳述句是合法的,也就是說你可以在另一個if或者else if陳述句中使用if或者else if陳述句,你可以像if陳述句一樣嵌套else if…else
語法:
if(布爾運算式1){
//如果布爾運算式1為true則執行的陳述句
if(布爾運算式2){
//這里是如果布爾運算式2為true則將執行的陳述句
}
}
3.5switch多選擇結構
-
多選擇結構還有一個實作方式就是switch case陳述句
-
switch case陳述句判斷一個變數與一系列值中的某個值是否相等,每一個值稱為一個分支
-
switch陳述句中的變數型別可以是:
-
byte、short、int或者char
-
從Java SE 7開始 switch支持字串型別,同時case標簽必須為字串常量或字面量
-
語法:
switch(expression){
case value:
//陳述句
break;//可選
case value:
//陳述句
break;//可選
//你可以有任意數量的case陳述句
default://可選
//陳述句
}
例子:case穿透現象
在switch陳述句中,如果case的后面不寫break,將出現穿透現象,也就是不會在判斷下一個case的值,直接向后運
行,直到遇到break,或者整體switch結束,
package li.bolog.struct;
public class SwitchDemo01 {
public static void main(String[] args) {
//
char grade='A';
switch(grade){
case 'A':
System.out.println("優秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");break;
default:
System.out.println("未知等級");
}
}
}

例子:switch支持字串型別
package li.bolog.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "中國";
//JDK7的新特性標,運算式結果可以是字串!!
//字串的本質還是數字
//反編譯 java--class(位元組碼檔案)----反編譯(這里用IDEA實作)
switch(name){
case "英國":
System.out.println("英國");break;
case "美國":
System.out.println("美國");break;
case "中國":
System.out.println("中國");break;
default:
System.out.println("弄啥嘞?");
}
}
}
字串的本質還是數字
這里使用IDEA反編譯該java檔案對應的class檔案,得到如下:
可以看到, switch(name)變成了switch(name.hashCode()),case后面對應的字串變成了數字,每一個中文都會有對應的哈希值,根據哈希值判斷中文是否相同,
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package li.bolog.struct;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
String name = "中國";
byte var3 = -1;
switch(name.hashCode()) {
case 642672:
if (name.equals("中國")) {
var3 = 2;
}
break;
case 1034543:
if (name.equals("美國")) {
var3 = 1;
}
break;
case 1061420:
if (name.equals("英國")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("英國");
break;
case 1:
System.out.println("美國");
break;
case 2:
System.out.println("中國");
break;
default:
System.out.println("弄啥嘞?");
}
}
}
4.回圈結構
-
while回圈
-
do...while回圈
-
for回圈
在java5中引入了一種主要用于陣列的增強型for回圈
4.1while回圈
while是最基本的回圈,它的結構為:
while(布爾運算式){
//回圈內容
}
-
只要布爾運算式為true,回圈就會一直執行下去
-
如果想要回圈停下來,就需要一個運算式失效的方式來結束回圈
-
回圈條件一直true就會造成無限回圈[死回圈]
例子:輸出1-100
package li.bolog.struct;
public class WhileDemo01 {
public static void main(String[] args) {
//輸出1到100
int i = 0;
while(i<100){
i++;
System.out.print(i);
}
}
}

例子:計算1+2+...+100
package li.bolog.struct;
public class WhileDemo02 {
public static void main(String[] args) {
//計算1+2+...+100
int i=0;
int sum=0;
while(i<=100){
sum=sum+i;
i++;
}
System.out.println(sum);
}
}

4.2do...while回圈
對于while陳述句而言,若果不滿足條件,則不能進入回圈,但有時候我們需要即使不滿足條件,也至少執行一次,
do...while回圈和while回圈相似,不同的是,do...while回圈至少會執行一次
語法:
do{
//代碼陳述句
}
while(布爾運算式);
-
while和do...while的區別:
-
while先判斷后執行,do-while是先執行后判斷
-
do-while總是保證回圈體至少會被執行一次!這是他們的主要區別
-
例子:計算1+2+...+100
package li.bolog.struct;
public class DoWhlieDemo01 {
public static void main(String[] args) {
int i=0;
int sum=0;
do{
sum=sum+i;
i++;
}while(i<=100);
System.out.println(sum);
}
}

例子:while和do-while
package li.bolog.struct;
public class DoWhileDemo02 {
public static void main(String[] args) {
int a=0;
while (a<0){
System.out.println(a);
a++;
}
System.out.println("===========");
do{
System.out.println(a);
a++;
}while(a<0);
}
}

4.3For回圈
for回圈陳述句是支持迭代的一種通用結構,是最有效,最靈活的回圈結構
for回圈執行的次數是在執行前就確定的,
語法:
for(初始化;布爾運算式;更新){
//代碼陳述句
}
例子:while和for回圈對比
package li.bolog.struct;
public class ForDemo01 {
public static void main(String[] args) {
int a = 1;//初始化條件
while(a<=100){//條件判斷
System.out.print(a+" ");//回圈體
a+=8;//迭代
}
System.out.println("while回圈結束!");
//初始化 //條件判斷 //迭代
for(int i=1;i<=100;i=i+8){
System.out.print(i+" ");
}
System.out.println("for回圈結束!");
}
}

關于for回圈有以下幾點說明:
最先執行的初始化步驟可以宣告一種變數,也可初始化一個或者多個回圈控制變數,也可以是空陳述句
然后執行檢測布爾運算式的值,如果為true,回圈體執行;如果為false,回圈終止,開始執行回圈體后面的陳述句
執行一次回圈后,更新回圈控制變數(迭代因子控制回圈變數的增減)
再次檢測布爾運算式,回圈執行上面的程序
練習1:分別計算0到100之間奇數和、偶數和
package li.bolog.struct;
public class ForDemo02 {
public static void main(String[] args) {
//分別計算0到100之間奇數和、偶數和
int oddSum=0;
int evenSum=0;
for (int i=0;i<=100;i++){
if(i%2!=0){
oddSum=oddSum+i;
}
else {
evenSum=evenSum+i;
}
}
System.out.println("奇數的和:"+oddSum);
System.out.println("偶數的和:"+evenSum);
}
}

練習2:用while或for回圈輸出1-1000之間能被5整除的數,并且每行輸出3個
package li.bolog.struct;
public class ForDemo03 {
public static void main(String[] args) {
//用while或for回圈輸出1-1000之間能被5整除的數,并且每行輸出3個
for (int i=1;i<=1000;i++){
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){//每行輸出的第三個值都是15的倍數,因此除以15
System.out.println();//或者System.out.println("\n");
}
}
}
}


練習3:列印九九乘法表
package li.bolog.struct;
public class ForDemo04 {
public static void main(String[] args) {
//我們先列印第一列
//我們先把固定的j用一個回圈包起來
//去掉重復項,j<=i
//調整樣式
for(int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}

增強for回圈:
Java5引入了一種主要用于陣列或者集合的增強型for回圈
Java增強for回圈語法格式如下:
for(宣告陳述句:運算式){
//代碼句子
}
宣告陳述句:宣告新的區域變數,該變數的型別必須和陣列元素的型別匹配,其作用域限定在回圈陳述句塊,其值與此時陣列元素的值相等
運算式:運算式是要訪問的陣列名,或者是回傳值為陣列的方法
package li.bolog.struct;
public class ForDemo05 {
public static void main(String[] args) {
int[] number={10,20,30,40};//定義了一個陣列
for(int i=0;i<4;i++){
System.out.println(number[i]);
}
System.out.println("=========");
//遍歷陣列元素
for(int x:number){
System.out.println(x);
}
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500311.html
標籤:其他
