Spring解決迴圈依賴的三種方式
技術標籤:程式語言javaeclipseintellij idea
第二天學習
使用者互動Scanner
java.util.Scanner
通過Scanner類來獲取使用者的輸入
基本語法:Scanner s=new Scanner(System.in);
通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前,我們需要使用hasNext()與hasNextLine()判斷是否還有輸入的資料。
Scanner物件
next()
- 一定要讀取到有效字元後才可以結束輸入
- 對輸入有效字之前遇到空白,next()方法會自動將其去掉
- 只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符
- next()不能得到帶有空格的字串
nextLine()
- 可以以Enter為結束符,也就是說next()方法返回的是輸入回車之前的所有字元
- 可以獲得空白
順序結構
Java的基本結構是順序結構,除非特別指明,否則就按照順序一句一句執行
順序結構是最簡單的演算法結構
語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,他是任何一個演算法都離不開的一種基本演算法結構
選擇結構
-
if單選擇結構
我們很多時候需要去判斷一個東西是否可行,然後我們才去執行,這樣一個過程在程式中用if語句來表示
語法:
if(布林表示式){ //如果布林表示式為true將執行的語句 }
-
if雙選擇結構
語法:
if(布林表示式){ //如果布林表示式的值為true }else{ //如果布林表示式的值為false }
-
if多選擇結構
語法:
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語句都得跳過執行
-
巢狀結構的if結構
使用巢狀的if…else語句是合法的,也就是說你可以在另外一個if或者else if語句中使用else if或if語句
語法
if(布林表示式1){ //如果布林表示式1的值為true執行程式碼 if(布林表示式2){ //如果布林表示式2的值為true執行程式碼 } }
-
switch多選擇結構
多選擇結構還有一個實現方式就是switch case語句
switch case語句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支
switch(expression){
case value:
//語句
break;//可選
case value:
//語句
break;
default://可選
//語句
}
switch語句中的變數型別可以是:
- byt、short、int、或者char
- 從java se7開始
- switch支援字串String型別了
- 同時case標籤必須為字串常量或字面量
迴圈結構
-
while迴圈
語法:
while(布林表示式){ //迴圈內容 }
只要布林表示式為true,迴圈就會一直執行下去
我們大多數情況是會讓迴圈停止下來,我們需要一個讓表示式失效的方式來結束迴圈
少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等
迴圈條件一直為true就會造成無限迴圈(死迴圈),我們正常的業務程式設計中應該儘量避免死迴圈,會影響程式效能或者造成程式卡死奔潰!
-
do while迴圈
對於while迴圈來說,如果不滿足條件,則不能進入迴圈,但有些時候我們需要即使不滿足條件,也至少執行一次
do{ //程式碼語句 }while(布林表示式)
while和do…while語句的區別:
- while先判斷後執行,do…while先執行後判斷
- do…while總是保證迴圈體會至少執行一次,這是他們的主要差別
-
for迴圈
雖然所有迴圈結構都可以用while或do…while表示,但java提供了另外一種語句——=-for迴圈,使一些迴圈結構變得更加簡單
for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構
for迴圈執行的次數是執行前就確定的
for(初始化;布林表示式;更新){ //程式碼語句 }
//println輸出完會換行 //print輸出完不會換行
-
在java5中引入了一種主要用於陣列的增強型for迴圈
這裡我們先只是見一面,做過了解,之後陣列我們重點使用
java5引入了一種主要用於陣列或集合的增強型for迴圈
java增強for迴圈語法格式如下:
for(宣告語句:表示式){
//程式碼
}
宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等
表示式:表示式是要訪問的陣列的陣列名,或者是返回值為陣列的方法
break continue
***break***在任何迴圈語句的主體部分,均可用break控制迴圈的流程,break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break語句也在switch語句中使用)
***continue***語句用在迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未被執行的語句,接著進行下次是否執行迴圈的判定。
關於goto關鍵字
- goto關鍵字很早就在程式設計語言中出現,儘管goto仍是java的一個保留字,但並未在語言中得到正式使用;java沒有goto,然後,在break和continue這兩個關鍵字的身上,我我們仍然能看出一些goto的影子…帶標籤的break和continue
- "標籤"是指後面跟一個冒號的識別符號,例如:label
- 對java來說唯一用到標籤的地方是在迴圈語句之前,而在迴圈之前設定標籤的唯一理由是:我們希望在其中巢狀另一個迴圈,由於break和continue關鍵字通常只中斷當前迴圈,但若隨同標籤使用,它們就會中斷到存在標籤的地方。
學習視訊
案例程式碼
package com.huhu.Sc;
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()==true){
//使用next方式接收
String str = scanner.next();
System.out.println("輸出的內容為:"+str);
}
scanner.close();
//凡是屬於IO流的後面都需要關閉,以節約資源
}
}
package com.huhu.Sc;
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()){
String str=scanner.nextLine();
System.out.println("輸出內容為:"+str);
}
scanner.close();
}
}
package com.huhu.Sc;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判斷是否還有輸入
String str=scanner.nextLine();
System.out.println("輸出內容為:"+str);
scanner.close();
}
}
package com.huhu.Sc;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
//從鍵盤接收資料
int i=0;
float f=0.0f;
System.out.println("請輸入整數:");
if(scanner.hasNextInt()){
i=scanner.nextInt();
System.out.println("整數資料:"+i);
}else{
System.out.println("輸入的不是整數資料!");
}System.out.println("請輸入小數:");
if(scanner.hasNextFloat()){
f=scanner.nextFloat();
System.out.println("小數資料:"+f);
}else {
System.out.println("輸入的不是小數資料!");
}
scanner.close();
}
}
package com.huhu.struct;
public class shunxu {
public static void main(String[] args){
System.out.println("Hello!");
System.out.println("2Hello!");
System.out.println("3Hello!");
System.out.println("4Hello!");
System.out.println("5Hello!");
}
}
package com.huhu.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();
//判斷字串是否相等
if(s.equals("Hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
package com.huhu.struct;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args){
//考試分數大於60分就是及格,小於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();
}
}
package com.huhu.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args){
//考試分數大於60分就是及格,小於60分就是不及格
Scanner scanner=new Scanner(System.in);
/*
if語句至多有一個else語句,else語句在所有的else if語句之後
if語句可以有若干個else if語句,他們必須在else語句之前
但其中一個else if語句檢測為true,其他的else if以及else語句都得跳過執行
*/
System.out.println("請輸入成績:");
int score = scanner.nextInt();
if(score==100){
System.out.println("恭喜滿分");
}else if(score<100){
System.out.println("A級");
}else if(score<90){
System.out.println("B級");
}else if(score<80){
System.out.println("C級");
}else if(score<60&&score>=0){
System.out.println("D級");
}else{
System.out.println("成績不合法");
}
scanner.close();
}
}
package com.huhu.struct;
public class SwitchDemo01 {
public static void main(String[] args){
//case穿透
char grade = 'C';
switch(grade){
case 'A':
System.out.println("優秀");
break;
case 'B':
System.out.println("良好");
case 'C':
System.out.println("中等");
case 'D':
System.out.println("一般");
case 'E':
System.out.println("差等");
default :
System.out.println("錯誤");
}
}
}
package com.huhu.struct;
public class SwitchDemo02 {
public static void main(String[] args){
String name = "huhu";
//JDK7的1特性,表示式結果可以是字串
//字元本質還是數字
//反編譯 java---class(位元組碼檔案)----反編譯(IDE)
switch(name){
case "huhu":
System.out.println("你好!");
break;
case "nini":
System.out.println("哈哈!");
break;
default :
System.out.println("錯誤");
}
}
}
package com.huhu.struct;
public class WhileDemo01 {
public static void main(String[] args){
//輸出1-100
int i = 0;
while(i<100){
i++;
System.out.println(i);
}
}
}
package com.huhu.struct;
public class WhileDemo02 {
public static void main(String[] args){
//死迴圈
while(true){
System.out.println("死迴圈");
}
}
}
package com.huhu.struct;
public class WhileDemo03 {
public static void main(String[] args){
//輸出1+2+3...+100的和sum
//高斯的故事
int i=0;
int sum=0;
while(i<100){
i++;
sum=sum+i;
}
System.out.println(sum);
}
}
package com.huhu.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);
}
}
package com.huhu.struct;
public class DoWhlieDemo01 {
public static void main(String[] args){
int i = 0;
int sum = 0;
do{
i++;
sum=sum+i;
}while(i<100);
System.out.println(sum);
}
}
package com.huhu.struct;
public class ForDemo01 {
public static void main(String[] args){
int a = 1;//初始化條件
while(a<=100){//條件判斷
System.out.println(a);//迴圈體
a+=2;//迭代
}
System.out.println("while迴圈結束!");
for(int i=1;i<=100;i++){
System.out.println(i);
}
System.out.println("for迴圈結束!");
/*
關於for迴圈有以下幾點說明:
最先執行初始化步驟,可以宣告一種型別,但可初始化一個或多個迴圈控制變數,也可以空語句
然後,檢測布林表示式的值,如果為true,迴圈體被執行,如果為false,迴圈終止,開始執行迴圈體後面的語句
執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)
再次檢測布林表示式,迴圈執行上面的過程
*/
//死迴圈
for(;;){
}
}
}
package com.huhu.struct;
public class ForDemo02 {
public static void main(String[] args){
//練習:計算0到100之間的奇數和偶數的和
int addSum = 0;
int evenSum = 0;
for(int i=0;i<=100;i++){
if(i%2!=0){
addSum+=i;
}else{
evenSum+=i;
}
}
System.out.println("偶數的和:"+addSum);
System.out.println("奇數的和:"+evenSum);
}
}
package com.huhu.struct;
public class ForDemo03 {
public static void main(String[] args){
//用while或for迴圈輸出1-1000之間能被5整除的數,並且每行輸出3個
for(int i=0;i<=1000;i++){
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){//每行
// System.out.println();
System.out.print("\n");
}
}
//println輸出完會換行
//print輸出完不會換行
}
}
package com.huhu.struct;
public class ForDemo04 {
//九九乘法表
public static void main(String[] args){
//我們先列印第一列,這個大家應該都會
//我們把固定的1再加一個迴圈包起來
//去掉重複項,i<=j
//調整樣式
for(int j=1;j<=9;j++){
for(int i=1;i<=j;i++){
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
package com.huhu.struct;
public class ForDemo05 {
public static void main(String[] args){
int[] numbers = {10,20,30,40,50};//定義一個數組
for(int i=0;i<5;i++){
System.out.println(numbers[i]);
}
System.out.println("=========");
//遍歷陣列的元素
for(int x:numbers){
System.out.println(x);
}
}
}
package com.huhu.struct;
public class BreakDemo01 {
public static void main(String[] args){
int i = 0;
while(i<100){
i++;
System.out.println(i);
if(i==30){
break;
}
}
System.out.println("程式將繼續執行!");
}
}
package com.huhu.struct;
public class ContinueDemo01 {
public static void main(String[] args){
int i= 0;
while(i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
}
package com.huhu.struct;
public class LabelDemo01 {
public static void main(String[] args){
//列印101--150之間所有質數
int count = 0;
outer:for(int i=101;i<150;i++){
for(int j=2;j<i/2;j++){
if(i%j==0){
continue outer;
}
}
System.out.print(i+" ");
}
}
}