一,Java語法基礎(四)-案例
1.1 資料交換程式
1.1.1 問題:
? 實作兩個變數間的資料交換,例如:有兩個整數型別變數a和b,現需要使變數a的值和變數b的值進行交換,例如: a的原值為100,b的原值為200,交換后a的值為200,b的值為100,
1.1.2 方案:
系統使用中間變數的方式來解決上述問題,
步驟1:把a變數的值賦給中間變數,代碼如下所示:
int temp=a;
步驟2:把b變數的值賦給a變數,代碼如下所示:
a=b;
步驟3:把中間變數的值賦給b變數,代碼如下所示:
b=temp;
最終實作了a變數的值和b變數的值的互換,如圖所示:

1.1.3 參考代碼:

1.1.4 擴展
不使用中間變數來實作資料交換程式,即實作兩個變數值的交換,可以先把a+b值賦給a,接著把a-b的值賦給b,最后把a-b的值在賦給a,請看如下代碼:
public class SwapExt{
public static void main(String[] args){
int a = 100;
int b = 200;
System.out.println("a="+a+",b="+b);
a=a+b;
b=a-b;
a=a-b;
System.out.println("a="+a+",b="+b);
}
}
1.2 計算自由落體運動中物體的位移
1.2.1 問題:
? 該系統使用互動的方式計算自由落體運動中物體的位置,用戶從控制臺輸入自由落體的時間t,系統計算經過時間t物體的自由落體位移,計算結果保留一位小數并且輸出到控制臺,系統互動程序 如圖所示

注:自由落體位移公式為: s = 1/2 × g × t*t ,其中:
s (位移(m)
t (時間(s)
g (重力加速度(9.8m/s2)
例如:從控制臺接收到的時間t為10s,那么位移s=1/2 × 9.8 × 10 × 10=490.0
1.2.2 方案:
? 系統使用double型別接收控制臺輸入的時間資料t,呼叫Scanner的nextDouble()方法接收用戶從控制臺輸入的時間資料,該方法的回傳值為double型別,代碼如下所示:
double t=scanner.nextDouble();
系統根據自由落體的位移公式計算出位移值s,s的型別為double,代碼如下所示:
double s=0.5*g*t*t;
**系統為了確保小數點后保留一位小數可以使用如下方法: **
s=Math.round(10*s)/10.0;
Math的round(double s)方法用于實作四舍五入的計算,回傳值為long型別的資料,
需要注意的是round(double s)回傳值為long型別,要除以double型別的資料后,其結果才
會自動型別轉換為double型別,因此被除數為double直接量10.0而不是int直接量10,
1.2.3 參考代碼:
import java.util.Scanner;
public class FreeFall{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
double g=9.80;
System.out.println("請輸入自由下落的時間(秒):");
double t=scanner.nextDouble();
double s=0.5*g*t*t;
s=Math.round(10*s)/10.0;
System.out.println(t+"秒后,物體自由下落了"+s+"米");
}
}
1.2.4 擴展
? 用戶從控制臺輸入物體下落的距離(米),然后計算下落此距離所需要花費的時間(秒),計 算結果需要保留一位小數,并且將結果輸出到控制臺,系統互動程序如圖所示:

系統代碼實作如下:
import java.util.Scanner;
public class FreeFallExt{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
double g=9.80;
System.out.println("請輸入自由下落的距離(米):");
double s=scanner.nextDouble();
double t=Math.sqrt(2*s/g);
t=Math.round(10*t)/10.0;
System.out.println("物體下落"+s+"米,需要"+t+"秒");
}
}
1.3 等額本息還款計算器
1.3.1 問題:
? 系統使用互動的方式計算等額本息貸款的還款情況,用戶從控制臺輸入貸款本金,貸款月利率和還款年數,系統根據上述資訊計算每月還款金額,要求每月還款金額保留兩位小數并且輸出到控制臺,
注:等額本息還款公式 :payment = (p × r × (1 + r)^m) / ((1 + r)^m - 1),
其中: p (貸款本金(元) r (貸款月利率 m (還款月數
系統互動程序如圖所示:

1.3.2 方案:
**系統使用double型別定義貸款本金和貸款月利率,代碼如下所示: **
double p=scanner.nextDouble()*10000;
double r=scanner.nextDouble()/1200;
**系統使用int型別定義還款年數,代碼如下所示: **
int m=scanner.nextInt()*12
系統根據等額本息還款公式計算出還款情況,使用Math.pow(double a,double b)計算冪運算,該方法回傳a的b次冪的值,代碼如下所示:
double payment=(p*r*Math.pow((1+r),m))/(Math.pow(1+r,m)-1);
系統使用Math.round()方法確保還款金額保留兩位小數,代碼如下所示:
Math.round(payment*100)/100.0
1.3.3 參考代碼:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7EKBWwOS-1606814168521)(VIP%20%E7%BB%83%E4%B9%A0%E5%90%88%E9%9B%86.assets/image-20201129221843491.png)]](https://img.uj5u.com/2020/12/03/200398030939217.png)
1.3.4 擴展
? 計算使用等額本金方式還貸的情況,用戶從控制臺輸入貸款本金,貸款月利率和還款年數,系統根據上述資訊計算第一個月和第二個月的還款金額,要求每月還款金額保留兩位小數并且輸出到控制臺,系統互動程序如圖:

等額本金還款公式為 :每月還款額=貸款本金/貸款期月數+(本金-已歸還本金累計額)×月利率
比如,貸款金額(即貸款本金)為30萬元,貸款年利率為 6.14%,還款年數為 20年,則計算方式如下:
每月本金:300000/240 = 1250
月利率:6.14%/12
首月還款:1250 + 300000 * 6.14%/12 = 2785
第 2 月還款: 1250 + (300000 - 1250) * 6.14%/12 = 2778.60
注:第一個月已歸還的本金1250 在第二個月就不用再計算利息, 系統代碼實作如下:
import java.util.Scanner;
public class MonthlyPaymentExt {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你的貸款本金:(萬)");
double p = scanner.nextDouble() * 10000;
System.out.println("請輸入你的貸款年利率:(%)");
double r = scanner.nextDouble() / 1200;
System.out.println("請輸入你的還款年數:");
int m = scanner.nextInt() * 12;
scanner.close();
double firstPayment = p / m + p * r;
firstPayment = Math.round(firstPayment * 100) / 100.0;
System.out.println("你的第一個月的還款金額為:¥"+ firstPayment);
double secondPayment=p/m+(p-p/m)*r;
secondPayment=Math.round(secondPayment*100)/100.0;
System.out.println("你的第二個月的還款金額為:¥"+ secondPayment);
}
}
1.4 計算牛郎星到織女星的距離
1.4.1 問題:
? 計算牛郎星到織女星的距離,牛郎星到織女星的距離為16.4光年,如果一只喜鵲的長度是0.46米,計算一下牛郎織女真的要會面需要動用多少只喜鵲,控制臺輸出資訊如圖所示:

注:
光速:299792458米/秒
1光年=(1 * 365 * 24 * 60 * 60 * 光速 / 1000)公里
1公里=1千米
1.4.2 方案:
使用double型別定義光年變數和喜鵲的長度變數,代碼如下所示:
double dLightYear=16.4;
double dMagpie=0.46;
使用int型別定義光速變數,沒有超過int的最大值,故使用int型別定義光速變數,代碼如下所示:
int speedOfLight=299792458;
根據公式計算牛郎星到織女星的距離,使用long型別定義牛郎星到織女星的距離變數,代碼如下所示:
long d=(long)(dLightYear*365*24*60*60*speedOfLight/1000);
根據公式計算出牛郎織女會面,搭起鵲橋需要的喜鵲只數,超過int型別的最大,但是小于long的最大值,故使用long型別定義需要喜鵲的只數變數,代碼如下所示:
long numberOfMagpie=(long)(d*1000/dMagpie)
1.4.3 參考代碼:
系統代碼實作如下:

1.4.4 擴展:
? 據稱,一個人一生中要走的路加起來可以繞地球七十五圈,地球的平均半徑為 6371.004 千米,而一個人走一步的步長大約是 60 厘米,請計算一個人一生中要走多少步?系統互動程序如圖所示,

**系統代碼實作如下: **

1.5 閏年判斷程式
1.5.1 問題:
判斷某年是否為閏年,根據用戶在控制臺輸入的年份值,判斷該年是否為閏年,系統互動情況如圖所示:

1.5.2 方案:
? 使用數學運算子取余運算(%),關系運算子等于(==)和不等于(!=),邏輯運算子邏輯 與(&&)和邏輯或(||),來判斷某年是否為閏年,判斷的結果為boolean型別的值,如果為閏年 boolean型別的值為true,否則為false,代碼如下所示:
boolean isLeapYear=(year%4==0&&year%100!=0)||year%400==0;
使用三目運算子,獲取是否為閏年的String型別資訊,輸出到控制臺,代碼如下所示:
String msg=isLeapYear?year+"是閏年":year+"不是閏年";
1.5.3 參考代碼:

1.5.4 擴展:
計算某年某月的天數,由用戶在控制臺輸入年份和月份值,然后計算年該月的天數,并輸出在控制臺,系統互動情況如圖所示:

注:大月有31天,小月有30天,閏年的2月有29天,非閏年的2月有28天,系統代碼實作如下:
import java.util.Scanner;
public class LeapYear{
public static void main(String[]args){
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入年份(例如:2020)");
int year=scanner.nextInt();
System.out.println("請輸入月份(例如:1)");
int month=scanner.nextInt();
scanner.close();
//判斷是否是閏年
boolean isLeapYear=(year%4==0&&year%100!=0)||year%400==0;
//判斷大月和小月,2月除外
boolean isLittleMonth=month==4||month==6||month==9||month==11;
boolean isLargeMonth=month==1||month==3||month==5||month==7||month==8||month==10||month==12;
//計算天數
int days=isLittleMonth?30:(isLargeMonth?31: (isLeapYear?29:28));
//輸出
System.out.println(year+"年"+month+"月有"+days+"天");
}
}
1.6 數字排序程式
1.6.1 問題:
? 系統使用互動的方式給三個數字進行排序,例如:接收用戶輸入的三個整數a,b,c,a的原值是20,b的原值是5,c的原值是10,排序后a的值為5,b的值為10,c的值為20,系統互動情況如 圖所示:

1.6.2 方案:
系統使用if陳述句實作對三個數的排序,首先判斷a和b的大小情況并進行交換,代碼如下:

其次判斷a和c的大小情況,并進行交換,代碼如下:

最后判斷b和c的大小情況,并進行交換,代碼如下:

1.6.3 參考代碼:
import java.util.Scanner;
public class MaxofThree {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
System.out.println("請依次輸入三個整數:a,b,c(以空格隔開)");
int a=scanner.nextInt();
int b=scanner.nextInt();
int c=scanner.nextInt();
scanner.close();
System.out.println("a="+a+",b="+b+",c="+c);
int temp=0;
if(a>b) {
temp = a;
a = b;
b = temp;
}
if(a>c) {
temp = a;
a = c;
c = temp;
}
if(b>c) {
temp = b;
b = c;
c = temp;
}
System.out.println("a="+a+",b="+b+",c="+c);
}
}
1.6.4 擴展
用戶在控制臺輸入 3 個數值,需要找出這 3 個數值中的最小值,要求使用 if 陳述句來實作,系統互動資訊如圖所示:

import java.util.Scanner;
public class MinofThree {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請依次輸入三個整數:a,b,c(以空格隔開)");
int a=scanner.nextInt();
int b=scanner.nextInt();
int c=scanner.nextInt();
scanner.close();
int temp = a;
if(temp>b) {
temp = b;
}
if(temp>c) {
temp = c;
}
System.out.println("最小值為:"+temp);
}
}
1.7 個人所得稅計算器
1.7.1 問題:
計算個人所得稅的繳納情況,用戶從控制臺輸入稅前工資的金額,系統根據用戶輸入的工資金額計算應繳納的稅額,如圖所示:

注:
工資個稅的計算公式為:
應納稅額=(工資薪金所得-扣除數)×適用稅率-速算扣除數
全月應納稅所得額=月工資薪金所得-扣除數
2011年 9月1日起執行7級超額累進稅率:扣除數為3500元,

1.7.2 參考代碼:
package day03;
import java.util.Scanner;
public class IncomeTax {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你的工資的稅前金額(¥):");
double salary = scanner.nextDouble();
double tax = 0.0;
double taxIncome = salary-3500;
if(taxIncome<=0) {
tax = 0.0;
}else if(taxIncome<=1500) {
tax = taxIncome*0.03;
}else if(taxIncome<=4500) {
tax = taxIncome*0.10-105;
}else if(taxIncome<=9000) {
tax = taxIncome*0.20-555;
}else if(taxIncome<=35000) {
tax = taxIncome*0.25-1005;
}else if(taxIncome<=55000) {
tax = taxIncome*0.30-2755;
}else if(taxIncome<=80000) {
tax = taxIncome*0.35-5505;
}else {
tax=taxIncome*0.45-13505;
}
System.out.println("你應該繳納的個人所得稅是:¥"+tax);
scanner.close();
}
}
1.7.3 擴展:
? 計算個人工資收入的保險繳納情況以及個人所得稅,用戶從控制臺輸入稅前工資的金額,系統根據用戶輸入的工資金額計算應繳納的各項保險的總金額,并計算應該繳納的稅額,系統互動程序如圖所示:

注:
工資個稅的計算公式為:
應納稅額=(工資薪金所得-各項保險金額-扣除數)×適用稅率-速算扣除數
全月應納稅所得額=月工資薪金所得-各項保險金額-扣除數
其中,各項保險金額的繳納比例如下:
養老保險:月工資薪金所得 × 8%
醫療保險:月工資薪金所得 × 2%
失業保險:月工資薪金所得 × 0.2%
公積金:月工資薪金所得 × 12%
系統代碼實作如下:
package day03;
import java.util.Scanner;
public class InsuranceTax {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("請輸入你的工資的稅前金額(¥):");
double salary=scanner.nextDouble();
scanner.close();
//計算各項保險金額
double endowmentInsurance=salary*0.08;
double medicalInsurance=salary*0.02;
double unemploymentInsurance=salary*0.002;
double accumulationFund=salary*0.12;
double insurance=endowmentInsurance+medicalInsurance+unemploymentInsurance+accumulationFund;
System.out.println("你應該繳納的各項保險總金額為:¥"+insurance);
//計算個稅
double tax=0.0;
double taxIncome=salary-insurance-3500;
if(taxIncome<=0) {
tax = 0.0;
}else if(taxIncome<=1500) {
tax = taxIncome*0.03;
}else if(taxIncome<=4500) {
tax = taxIncome*0.10-105;
}else if(taxIncome<=9000) {
tax = taxIncome*0.20-555;
}else if(taxIncome<=35000) {
tax = taxIncome*0.25-1005;
}else if(taxIncome<=55000) {
tax = taxIncome*0.30-2755;
}else if(taxIncome<=80000) {
tax = taxIncome*0.35-5505;
}else {
tax=taxIncome*0.45-13505;
}
System.out.println("你應該繳納的個人所得稅是:¥"+tax);
scanner.close();
}
}
有疑問的同學可以QQ掃描下方二維碼,尋求幫助

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/229152.html
標籤:java
上一篇:連續肝了好幾天,終于把Java面試必備最重要的基礎知識【Java集合】知識點總結整理出來了。
下一篇:Spring框架及七大模塊
