摘要:代碼實(shí)現(xiàn)在控制臺打印總結(jié)本篇文章帶大家搭好環(huán)境,并體驗(yàn)了控制臺打印。輸出結(jié)果總結(jié)熟練掌握取余和整除運(yùn)算,大有作用。終止本次循環(huán),繼續(xù)執(zhí)行下一次循環(huán)。
?本文收錄于專欄《技術(shù)專家修煉》
試用于學(xué)完「Java基礎(chǔ)語法」后的鞏固提高及「LeetCode刷題」前的小試牛刀。作者其它優(yōu)質(zhì)專欄推薦:
?《源碼中的設(shè)計模式》——理論和實(shí)戰(zhàn)的完美結(jié)合
?《leetcode 300題》——每天一道算法題,進(jìn)大廠必備
?《從實(shí)戰(zhàn)學(xué)python》——Python的爬蟲,自動化,AI等實(shí)戰(zhàn)應(yīng)用(代碼開源)
Java入門練習(xí)100例1-10源碼 提取碼: uqqe
難度:簡單
在控制臺打印“Hello Java!”
“工欲善其事必先利其器”,即使輸出語句很簡單,沒有運(yùn)行環(huán)境,也是巧婦難為無米之炊。
在線環(huán)境
有很多小伙伴和我說,還沒等體驗(yàn)Hello World
的快感呢,就被配置環(huán)境變量勸退了。
一條找了在線環(huán)境供小伙伴先體驗(yàn)一下。地址
Windows配置
Windows平臺是使用者最多,配置起來最麻煩的平臺,為了不被勸退,教大家最簡單的方法。
1.安裝JDK
不要更改安裝位置!目錄不要有中文!
2.打開環(huán)境變量
教大家最快打開環(huán)境變量的方法:
按快捷鍵win+R后,輸入“sysdm.cpl”,然后回車,完事。
3.新建JAVA_HOME
點(diǎn)擊新增——變量名:JAVA_HOM
,變量值:JDK安裝路徑。
默認(rèn)為:C:/ProgramFiles/Java/jdk1.8.0_79/bin
如此就可以,不用再配置path
,class_path
。
等你熟練掌握了,再研究都是什么意思即可。
Mac配置
由于Mac基于Linux內(nèi)核,安裝即可,不需要配置環(huán)境變量。
開發(fā)工具比較流行的有eclipse,idea,VScode等,個人推薦idea,有關(guān)使用參考我的專欄《玩轉(zhuǎn)IDEA》
System.out.println("Hello Java!");
是Java語言的輸出語句,相比于python的print()
復(fù)雜了不少,那Java的輸出語句到底是怎么實(shí)現(xiàn)的?
System
:java.long
包的類,在創(chuàng)建類文件時就被加載,不需要引入。被final
修飾,不能被實(shí)例化。
public final class System { // ……}
out
:System
類下的靜態(tài)變量,對應(yīng)PrintStream
類,同樣的還有in
,err
變量。
public final static PrintStream out = null;
println
:PrintStream
類的方法,就是在這里實(shí)現(xiàn)IO流的輸出。
public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }
/** * https://www.nhooo.com/tool/java/ * 在控制臺打印"hello java" */public class question_01 { public static void main(String[] args) { System.out.println("hello java"); }}
本篇文章帶大家搭好環(huán)境,并體驗(yàn)了控制臺打印。
下一題是控制臺輸入,大家可以先思考一下?
難度:簡單
從鍵盤輸入一個數(shù)字,打印出該數(shù)字的絕對值。
和打印一樣,相比于python的
input()
,Java的輸入也比較麻煩,但是作為初學(xué)者練習(xí),屬于必會內(nèi)容。下面一條會介紹三種輸入的方法,小伙伴們要注意他們的區(qū)別。
System.in
該方法能獲取從鍵盤輸入的字符,但只能針對一個字符的獲取,獲取的只是char
類型的。如果想獲得int
,float
等類型的輸入,比較麻煩。具體見代碼。
InputStreamReader
可以獲取鍵盤輸入的字符串,如果要獲取的是int
,float
等類型的仍然需要轉(zhuǎn)換。具體見代碼。
Scanner
可以獲取鍵盤輸入的字符串,有現(xiàn)成的獲取int
,float
等類型數(shù)據(jù),非常方便,被廣泛使用。具體見代碼。
Java 的
Math
類包含了用于執(zhí)行基本數(shù)學(xué)運(yùn)算的屬性和方法,如初等指數(shù)、對數(shù)、平方根和三角函數(shù)。Math 的方法都被定義為
static
形式,通過Math
類可以在主函數(shù)中直接調(diào)用。下面簡單介紹幾個常用的函數(shù)。具體見代碼。
abs()
返回參數(shù)的絕對值。min()
返回兩個參數(shù)中的最小值。max()
返回兩個參數(shù)中的最大值。pow()
返回第一個參數(shù)的第二個參數(shù)次方。sqrt()
求參數(shù)的算術(shù)平方根。random()
返回一個隨機(jī)數(shù)。Math.PI
圓周率Java支持顯示和隱式轉(zhuǎn)換,在實(shí)際應(yīng)用中要善于使用包裝類的parseXXX()
和valueOf()
方法。
特別的,char
轉(zhuǎn)int
可以通過ascii
的方式。例:
char ch = "9";int i=ch-"0"System.out.println(i);
三種方法實(shí)現(xiàn)。
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;/** * 從鍵盤輸入一個數(shù)字,打印出該數(shù)字的絕對值。 */public class question_02 { public static void main(String[] args) throws IOException { question_02 question02 = new question_02(); question02.method1();// question02.method2();// question02.method3(); } //System.in public void method1() throws IOException { System.out.println("Please Enter Data:"); char i = (char)System.in.read(); System.out.println("System.in --> "+Math.abs(i-"0")); } //InputStreamReader public void method2() throws IOException { System.out.println("Please Enter Data:"); //new一個InputStreamReader對象 InputStreamReader is = new InputStreamReader(System.in); //BufferedReader的有參構(gòu)造的方法 BufferedReader br = new BufferedReader(is); //讀取一行,拋出異常 String line = br.readLine(); System.out.println("InputStreamReader --> "+Math.abs(Integer.parseInt(line))); } //Scanner public void method3(){ System.out.println("Please Enter Data:"); Scanner sc = new Scanner(System.in); //讀取int int i = sc.nextInt(); //String s = sc.nextLine(); 讀取字符串型輸入 //float f = sc.nextFloat(); 讀取float型輸入 System.out.println("Scanner --> "+Math.abs(i)); }}
輸出結(jié)果
思考:
sc.next()
和sc.nextLine()
有什么區(qū)別?
答:next()
遇到空格停止接收。
難度:簡單
/*** 短路與和邏輯與*/public class question_03 { public static void main(String[] args){ int i=5; boolean e = i > 6 & i++ > 7; System.out.println(e); System.out.println(i); e = i > 6 && i++ > 7; System.out.println(e); System.out.println(i); }}
請寫出以上代碼的輸出
邏輯與(&)和短路與(&&)在運(yùn)算上對條件的結(jié)果判斷不會產(chǎn)生影響,但會對條件本身的運(yùn)算有影響。
邏輯與(&)在運(yùn)算時會連續(xù)運(yùn)算所有需要判斷的命令.但短路與當(dāng)遇到false
時就停止運(yùn)算。
分析
第一次判斷是邏輯與,老實(shí)人不管對錯,全部計算一下,則i++
被執(zhí)行,輸出e=false;i=6
;
第二次判斷是短路與,機(jī)靈鬼先判斷第一個是錯的,就不再往下計算,i++
不被執(zhí)行,輸出e=false;i=6
;
驗(yàn)證
在實(shí)際開發(fā)中為了增強(qiáng)代碼的可讀性,統(tǒng)一使用短路與,且不在判斷條件中做任何運(yùn)算。
難度:簡單
用if語句實(shí)現(xiàn)a、b、c的值按從小到大排序
if
判斷本題整理的思路就是比較 - > 交換。
if
作為一種分支結(jié)構(gòu),用來根據(jù)判斷條件的不同做不同的后續(xù)處理。
通常的做法,好比交換兩個杯子的水,需要先找來一個空杯子,也就是一個臨時變量存值。代碼如下:
int t=a;a=b; b=t;
高級做法,不使用其他變量如何做?思考?一下,文末給出答案。
/** * 用if語句實(shí)現(xiàn)a、b、c的值按從小到大排序 */public class question_04 { public static void main(String args[]){ int a=9,b=5,c=7,t; if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } System.out.println("a="+a+",b="+b+",c="+c); }}
輸出結(jié)果
如何不用其他變量交換兩個數(shù)的值?
答,將兩個數(shù)做加/乘法。在做減/除法。代碼如下:
a=a*b;b=a/b; //等價于 a*b/b=a,即將a的值賦給了ba=a/b; //等價于 a*b/a=b,即將b的值賦給了a
加減的方式留給大家去實(shí)現(xiàn)。
難度:簡單
計算 5+ 55 + 555 + … 的前10項(xiàng)的和
簡單的for
循環(huán)的應(yīng)用,確定好初始值,步長,終止值即可。
難點(diǎn)在如何確定加數(shù),即找到加數(shù)之間的規(guī)律。
不難發(fā)現(xiàn)每一個加數(shù)是前一個加數(shù)的10倍+5。
??注意一點(diǎn):最終的結(jié)果可能會超出int
的范圍,需要使用long
。
/** *計算 5+ 55 + 555 + ... 的前10項(xiàng)的和 */public class question_05 { public static void main(String args[]){ //定義變量 long sum=0,a=5,item=a; //初值1,步長1,終值10 for(int i=1;i<=10;i++) { //追加到總和 sum=sum+item; //確定下一個加數(shù) item=item*10+a; } System.out.println(sum); }}
輸出結(jié)果
除了for
循環(huán),用while
能否實(shí)現(xiàn)呢?什么時候用for
?什么時候用while
?
難度:簡單
計算 1 + 1/2! + 1/3! + 1/4! + … + 1/20! 的值。
觀察算式的規(guī)律,從1-20,每次加1,循環(huán)20次。
n!
是為階乘,等于1*2*3*4...(n-1)*n
動態(tài)規(guī)劃,一直是算法中的難點(diǎn),本次不做深度講解,通俗的說一下。
就是把復(fù)雜問題簡單化,比如4 的階乘可以看到3 的階乘再乘4,而3的階乘可以看做2的階乘再乘3,2的階乘等于1乘2。
其實(shí)就是這樣一個思想,可以看下leetcode《爬樓梯》這道題。
/** * 計算 1 + 1/2! + 1/3! + 1/4! + + 1/20! 的值 */public class question_06 { public static void main(String args[]) { double sum=0,a=1; int i=1; while(i<=20) { sum=sum+a; i=i+1; //關(guān)鍵點(diǎn),動態(tài)規(guī)劃思想 a=a*(1.0/i); } System.out.println("sum="+sum); }}
輸出結(jié)果
上一節(jié)的問題:什么時候用for
?什么時候用while
?
答:其實(shí)兩者區(qū)別不大,大多數(shù)情況都可以解決問題。只需記住一點(diǎn):循環(huán)次數(shù)未知時用while。
難度:簡單
計算給定整數(shù)12345的各位上數(shù)字的和。
解題的關(guān)鍵在于如何拿到各個位上的數(shù)字。
舉例:拿到34的個位和十位
int a=34;//整除運(yùn)算,拿到3int b=34/10;//返回余數(shù)4int c=34%10;
/** * 計算給定整數(shù)12345的各數(shù)字的和。 */public class question_07 { public static void main(String args[]) { int y = 12345; int r = 0 ; int sum = 0; while(y!=0) { r = y % 10; sum += r; y = y / 10; } System.out.println("y = " + sum); }}
輸出結(jié)果
熟練掌握取余和整除運(yùn)算,大有作用。
難度:簡單
計算500以內(nèi)的素數(shù)和。
break
和continue
大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)就叫做素數(shù)。
比如2=1×2;5=1×5;
所以2、5就是素數(shù)。但6=1×6=2×3
,即6除了1和自身6外還有其他因數(shù)2和3,不是素數(shù)。
break
:終止所有循環(huán),直接跳出。
continue
:終止本次循環(huán),繼續(xù)執(zhí)行下一次循環(huán)。
Math.sqrt()
/** * 求500以內(nèi)的素數(shù)和 */public class question_08 { public static void main(String[] args) { int sum=0,i,j; for(j=2;j<=500;j++) { for( i=2;i<=j/2;i++) { if(j%i==0) break; //說明除去1和本身有其他除數(shù),不是素數(shù),也就沒有繼續(xù)循環(huán)的必要 } if(i>j/2) { //i>j/2說明,break沒有被執(zhí)行到,即除去1和本身無其他除數(shù),是素數(shù) sum+=j; } } System.out.println(sum); }}
輸出結(jié)果
思考:如果是計算500w以內(nèi)的素數(shù)和,如何提高效率呢?
回答:將j/2
改為Math.sqrt()
。
難度:簡單
輸出一維整型數(shù)組中的值最小的那個元素及其下標(biāo)。
所謂的數(shù)組指的就是一組相關(guān)類型的變量集合,并且這些變量可以按照統(tǒng)一的方式進(jìn)行操作。
定義數(shù)組
int data[] = new int[3];// 數(shù)組的長度為3,超過會報下標(biāo)越界異常,且下標(biāo)從0開始
添加元素
data[0] = 10; // 第一個元素data[1] = 20; // 第二個元素data[2] = 30; // 第三個元素
循環(huán)打印
for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通過循環(huán)控制索引}
其實(shí)嚴(yán)格來說我們并沒有用到排序算法,但有一些思想在里面,想提前了解可以看這篇。
/** * 輸出一維整型數(shù)組中的值最小的那個元素及其下標(biāo)。 */public class question_09 { public static void main(String args[]) { int a[] = { 12, 24, 6, 37, 3, 22, 64 }; int min = 0; for (int i = 1; i < a.length; i++) { if (a[min] > a[i]) { min = i; } } System.out.println("a[" + min + "] = " + a[min]); }}
輸出結(jié)果
本節(jié)練習(xí)了一維數(shù)組的操作,下一節(jié)練習(xí)二維數(shù)組。
難度:簡單
計算二維數(shù)組中各行元素之和并查找其值最大的那個行。
二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即“數(shù)組的數(shù)組”。可以想像成一個方陣。
定義數(shù)組
int brr [] []=new int[][3]; //二維數(shù)組中行可以省略,至少寫出列
添加元素
brr[0][0]=1; //下標(biāo)同樣從0開始,可以指定位置賦值,也可以整體賦值。brr={ {1,2,3}, {5,6,7}, {9,10,11}};
循環(huán)遍歷
//遍歷行for(int i=0;i<3;i++){ //遍歷列 for(int j=0;j<3;j++){
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/122020.html
摘要:于是乎,我建立了這個項(xiàng)目,收錄一些有趣的小程序,便于閱讀和思考。下面是一些列舉一些有趣的內(nèi)容這是來自編程從入門到實(shí)踐中的一個小游戲。用語言實(shí)現(xiàn)的編譯器。做的小博客,持續(xù)開發(fā)中這個項(xiàng)目還在不斷豐富中,如果你有什么有趣的分享,歡迎聯(lián)系我。 紙上得來終覺淺,絕知此事要躬行。 這本書或這個視頻看完了,我可以做點(diǎn)什么?編程難道只是命令行打印些東西?該找點(diǎn)什么適合練手的項(xiàng)目來練習(xí)練習(xí)呢? 我想可能...
摘要:很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針比如中的指針,中的,也有指針,雖然它的指向可能相對復(fù)雜些,但是指向的,永遠(yuǎn)只可能是對象。 很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針,比如JAVA、C++中的this指針,python中的self,JavaScript也有this指針,雖然它的指向可能相對復(fù)雜些,但是this指向的,永遠(yuǎn)只可能是對象。 一、在一般函數(shù)方法...
摘要:很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針比如中的指針,中的,也有指針,雖然它的指向可能相對復(fù)雜些,但是指向的,永遠(yuǎn)只可能是對象。 很多高級編程語言都給新創(chuàng)建的對象分配一個引用自身的指針,比如JAVA、C++中的this指針,python中的self,JavaScript也有this指針,雖然它的指向可能相對復(fù)雜些,但是this指向的,永遠(yuǎn)只可能是對象。 一、在一般函數(shù)方法...
摘要:一方面是因?yàn)橄胍朔约旱亩栊裕硪环矫嬉彩窍胫匦聹毓室槐椤R还卜殖闪藗€基礎(chǔ)部分,后續(xù)還會繼續(xù)記錄。文章中如果有筆誤或者不正確的解釋,也歡迎批評指正,共同進(jìn)步。最后地址部分源碼 Why? 網(wǎng)上現(xiàn)有的Vue源碼解析文章一搜一大批,但是為什么我還要去做這樣的事情呢?因?yàn)橛X得紙上得來終覺淺,絕知此事要躬行。 然后平時的項(xiàng)目也主要是Vue,在使用Vue的過程中,也對其一些約定產(chǎn)生了一些疑問,可...
閱讀 2435·2021-10-09 09:44
閱讀 3792·2021-09-22 15:43
閱讀 2923·2021-09-02 09:47
閱讀 2537·2021-08-12 13:29
閱讀 3871·2019-08-30 15:43
閱讀 1679·2019-08-30 13:06
閱讀 2187·2019-08-29 16:07
閱讀 2745·2019-08-29 15:23