JAVA語言程序設計(基礎篇) 第十版——第六章 方法 (參考答案)

(6.2~6.9節)+(6.10~6.11節)+(6.10~6.12節)

(綜合題還未寫,以後會更新)

(6.2~6.9節)

6.1(數學:五角數)

import java.util.Scanner;

public class S1 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請問您想要顯示前 幾個個五角數:");
		int m=input.nextInt();// 顯示前 m個五角數
		input.close();
		
		int count=0;
		int shu=0;
		
		for(int n=1; n<=m; n++) {
			count++;
			shu=getPentagonalNumber(n);
			
			if(count%10==0) {
				System.out.println(shu);
			}
			else {
				System.out.print(shu + " ");
			}
		}
		
		
	}
		
	
		//得到五角數的方法
		public static int getPentagonalNumber(int n) {
			return n*(3*n-1)/2 ;	
		}
}

 *6.2(求一個整數各位數字之和)

import java.util.Scanner;

public class S2 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請問您輸入一個整數:");
		int n=input.nextInt();
		input.close();
		
		int total=sumDigit(n);
		System.out.println("這個整數的個位數之和爲:" + total);
		

	}
	
	public static int sumDigit(long n) {
		int sum=0;
		int count=0;
		while(n%10!=0) {
			count=(int) (n%10);
			sum=sum+count;
			n= n/10;
		}
		
		return sum;
		
	}	
	
	
}

**6.3(迴文整數)

import java.util.Scanner;

public class S3 {

	public static void main(String[] args) {
	//迴文數,如:(單數)1234321 、(偶數)124421
		Scanner input=new Scanner(System.in);
		System.out.print("請問您輸入一個整數:");
		int number=input.nextInt();
		input.close();
		if(isPalindrome(number))
			System.out.println("Yes! "+number+" 是迴文數.");
		else
			System.out.println("No. "+number+" 不是迴文數.");
	}
	
	//該方法將一個整數反向倒置顯示。例如,456——>654
	public static int reverse(int number) {
		String s="";
		while(number%10!=0) {
			s= s + number%10;
			number=number/10;
		}
		
		int count= Integer.parseInt(s);
		return count;
	}
	
	public static boolean isPalindrome(int number) {
		if(number==reverse(number))
			return true;
		else
			return false;
	}

}

*6.4(反向顯示一個整數)

import java.util.Scanner;

public class S4 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請問您輸入一個整數:");
		int number=input.nextInt();
		input.close();
		reverse(number);

	}
	
	public static void reverse(int number) {
		String s="";
		while(number%10!=0) {
			s= s + number%10;
			number=number/10;
		}
		
		int count= Integer.parseInt(s);
		System.out.print(count);
	}
}

*6.5(對三個數排序)

import java.util.Scanner;

public class S5 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請輸入三個數:");
		double n1=input.nextDouble();
		double n2=input.nextDouble();
		double n3=input.nextDouble();
		
		displaySortedNumbers(n1,n2,n3);
		
	}

	private static void displaySortedNumbers(double n1, double n2, double n3) {
		if(n1<n2) {
			// n1 n2
			if(n1>n3) {
				//n3-n1-n2
				System.out.print(n3+" "+n1+" "+n2);
				
			}
			else if(n1<n3){
				//還要拿3和2比較
				if(n2>n3)
					System.out.println(n1+" "+n3+" "+n2);
				else
					System.out.println(n1+" "+n2+" "+n3);
			}
		}
		else if(n1>n2) {
			// n2 n1
			if(n2>n3) {
				System.out.println(n3+" "+n2+" "+n1);
			}
			else if(n2<n3){
			//拿1和3比
				if(n1<n3) {
					System.out.println(n2+" "+n1+" "+n3);
				}
				else {
					System.out.println(n2+" "+n3+" "+n1);
				}
				
			}
		}
			
		
	}

	

}

*6.6(顯示圖案)

import java.util.Scanner;

public class S6 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("請問您輸入一個整數:");
		int n=input.nextInt();
		input.close();
		dispalyPattern(n);
		
	}

	private static void dispalyPattern(int n) {
		for(int line = 1;line <= n;line++)
		{	
			// Display the spaces
			for(int i = 1;i <= 2 * (n - line);i++)
				System.out.print(" ");
			
			for(int i = line;i >= 1;i--)
				System.out.printf("%d ",i);
			System.out.print("\n");
		}
		System.out.print("\n");


	}

}

*6.7(財務應用程序:計算未來投資價值)

import java.util.Scanner;

public class S7 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("The amount invested: ");
		double investmentAmount=input.nextDouble();
		System.out.print("Annual interest rate: ");
		double annualInterestRate=input.nextDouble();
		double monthlyInterestRate=annualInterestRate/12;
		input.close();
		System.out.println("Years          Future Value ");
		
		for(int years=1; years<=30; years++) {
				System.out.printf(
				" %-3d%18.2f\n",years, futureInvestmentValue(investmentAmount,monthlyInterestRate,years) );
	
		}
		
		
	}
		
		

	private static double futureInvestmentValue(double investmentAmount, double monthlyInterestRate, int years) {
		
		double value= investmentAmount * Math.pow( (1+monthlyInterestRate/100) , 12*years) ;

		return value;
	}
	
	
}

6.8(攝氏度和華氏度之間的轉換)

在一個包裏創建兩個類,我用測試類來調用其他類裏面的方法:  例如,int count=s8.方法

package p6;

public class S8 {

	public static double celsiusToFahrenheit(double celsius) {
		double fahrenheit=(9.0/ 5) * celsius + 32;
		return fahrenheit;
	}
	
	public static double fahrenheitToCelsius(double fahrenheit) {
		double celsius=(5.0/ 9) * (fahrenheit - 32);
		return celsius;
	}

}
package p6;

public class Test {

	public static void main(String[] args) {
		System.out.println("攝氏溫度           華氏度                    華氏度          攝氏度");
		System.out.println("——————————————————————————————————————————————————————");
		
		for(double celsius=40.0, fahrenheit=120.0; celsius>=31.0 && fahrenheit>=30.0; celsius--,fahrenheit=fahrenheit-10) {
			System.out.printf("%-13.1f%-15.1f %-10.1f%-10.2f \n", celsius, S8.celsiusToFahrenheit(celsius), fahrenheit, S8.fahrenheitToCelsius(fahrenheit));   
		}
	}
}

6.9(英尺和米之間的轉換)

一個包裏創建的兩個類

package p6;

public class S9 {
	//英尺轉換米
	public static double footToMeter(double foot) {
		double meter= 0.305 * foot;
		return meter;
	}
	
	//米轉換爲英尺
	public static double meterToFoot(double meter) {
		double foot= 3.279 * meter;
		return foot;
	}

}
package p6;

public class Test {

	public static void main(String[] args) {
		System.out.println("英尺          米                    米           英尺");
		System.out.println("——————————————————————————————————————————————————————");
		
		for(double foot=1.0, meter=20.0; foot<=10.0 && meter<=65.0; foot++, meter+=5) {
			System.out.printf("%4.1f%8.3f %10.1f%10.3f \n", foot, S9.footToMeter(foot), meter, S9.meterToFoot(meter));   
		}
	}
}

6.10(使用 isPrime方法)

public class S10 {

	public static void main(String[] args) {
		int count=0;//記錄素數的個數
		int number=2;
		while(number<10000) {
			if(isPrime(number)) {
				count++;
				if(count%10==0) {
					System.out.printf("%-5s\n",number);
				}
				else {
					System.out.printf("%-5s",number);
				}
			}
			
			number++;
		}
		System.out.println();
		System.out.println("小於10000的素數個數爲:"+count);
	}
	
	//判斷是否爲素數的方法
	public static boolean isPrime(int number) {
		for(int divisor=2; divisor<=number/2; divisor++) {
			if(number % divisor == 0) {
				return false;
			}
		}
		return true;
	}

}

6.11(財務應用程序:計算酬金)

package p6;

public class S11 {

	public static void main(String[] args) {
		
		System.out.println("銷售總額                    酬金");
		System.out.println("——————————————————————————");
		for(int salesAmount=10000; salesAmount<=100000; salesAmount+=5000) {
			System.out.printf("%-6d%15.1f\n", salesAmount, computeCommission(salesAmount));
		}
	}
	
	
	public static double computeCommission(double salesAmount){  
		double commission=0;
		if(salesAmount<=5000)
			commission=salesAmount*0.08;
		else if(salesAmount<=10000)
			commission=5000*0.08+(salesAmount-5000)*0.1;
		else
			commission=5000*0.08+(10000-5000)*0.1+(salesAmount-10000)*0.12; 
	
		return commission;
	}
}

6.12(顯示字符)

import java.util.Scanner;

public class S12 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("您想要從哪個字符開始一直打印到某個字符");
		System.out.print("請輸入第1個字符:");
		String s1=input.next();
		System.out.print("請輸入第2個字符:");
		String s2=input.next();
		System.out.print("每行打印幾個:");
		int numberPerLine=input.nextInt();
		input.close();
		
		char ch1=s1.charAt(0);
		char ch2=s2.charAt(0);
		
		printChar( ch1, ch2, numberPerLine);
	}
	
	
	public static void printChar(char ch1, char ch2, int numberPerLine) { 
		int count=0;
		for(char ch=ch1; ch<=ch2; ch++) {
			count++;
			if(count % numberPerLine == 0) {
				System.out.println(ch);
			}
			else {
				System.out.print(ch + " ");
			}
		}
	}
}

*6.13(數列求和)

public class S13 {

	public static void main(String[] args) {
		System.out.println("i          m(i)");
		System.out.println("————————————————————");
		for(int i=1; i<=20; i++) {
			System.out.printf("%-2d%15.4f\n", i, m(i));
		}

	}
	
	public static double m(int i) {
		double sum=0;
		for(double n=1; n<=i; n++) {
			sum += n/(n+1);
		}
		return sum;
	}
}

*6.14(估算 Π)

public class S14 {

	public static void main(String[] args) {
		System.out.println("i          m(i)");
		System.out.println("————————————————————");
		System.out.printf("%-2d%16.4f\n", 1, m(1));
		for(int i=101; i<=901; i+=100) {
			System.out.printf("%-2d%15.4f\n", i, m(i));
		}

	}
	
	public static double m(int i) {
		double sum=0;
		for(double n=1; n<=i; n++) {
			sum += 4*(Math.pow(-1, n+1) / (2*n-1));
		}
		return sum;
		
	}
	
}

*6.15(財務應用程序:打印稅表)

不想吐槽這題了,是什麼支撐老孃繼續打碼的┭┮﹏┭┮

package p6;

public class S15 {

	public static void main(String[] args) {
		System.out.println("Taxable     Single      Married Joint    Married        Head of");
		System.out.println("Income                                   Separate       a House");
		System.out.println("——————————————————————————————————————————————————————————————————");
		
		for(int i=50000; i<=60000; i+=50) {
			System.out.printf("%-12d%-15d%-15d%-15d%-15d\n", i, Math.round(computeTax(0,i)), Math.round(computeTax(1,i)), Math.round(computeTax(2,i)), Math.round(computeTax(3,i)));
		}
	}
	
	public static double computeTax(int status, double taxableIncome) { 
		double tax=0;
		
		//status爲0、1、2、3針對每一種身份
		if(status==0) {
			if(taxableIncome<=8350)
				tax=taxableIncome*0.1;
			else if(taxableIncome<=33950)
				tax=8350*0.1+(taxableIncome-8350)*0.15;
			else if(taxableIncome<=82250)
				tax=8350*0.1+(33950-8350)*0.15+(taxableIncome-33950)*0.25;
			else if(taxableIncome<=171550)
				tax=8350*0.1+(33950-8350)*0.15+(82250-33950)*0.25+(taxableIncome-82250)*0.28 ; 
			else if(taxableIncome<=372950)
				tax=8350*0.1+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(taxableIncome-171550)*0.33;
			else
				tax=8350*0.1+(33950-8350)*0.15+(82250-33950)*0.25+(171550-82250)*0.28+(372950-171550)*0.33+(taxableIncome-372950)*0.35;   
		}
		else if(status==1) {
			if(taxableIncome<=16700)
				tax=16700*0.1;
			else if(taxableIncome<=67900)
				tax=16700*0.1+(taxableIncome-16700)*0.15;
			else if(taxableIncome<=137050)
				tax=16700*0.1+(67900-16700)*0.15+(taxableIncome-67900)*0.25;
			else if(taxableIncome<=208850)
				tax=16700*0.1+(67900-16700)*0.15+(137050-67900)*0.25+(taxableIncome-137050)*0.28;
			else if(taxableIncome<=372950)
				tax=16700*0.1+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(taxableIncome-208850)*0.33;
			else
				tax=16700*0.1+(67900-16700)*0.15+(137050-67900)*0.25+(208850-137050)*0.28+(372950-208850)*0.33+(taxableIncome-372950)*0.35;  
	
		}
		else if(status==2) {
			if(taxableIncome<=8350)
				tax=8350*0.1;
			else if(taxableIncome<=33950)
				tax=8350*0.1+(taxableIncome-8350)*0.15;
			else if(taxableIncome<=68525)
				tax=8350*0.1+(33950-8350)*0.15+(taxableIncome-33950)*0.25;
			else if(taxableIncome<=104425)
				tax=8350*0.1+(33950-8350)*0.15+(68525-33950)*0.25+(taxableIncome-68525)*0.28;
			else if(taxableIncome<=186475)
				tax=8350*0.1+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(taxableIncome-104425)*0.33;
			else 
				tax=8350*0.1+(33950-8350)*0.15+(68525-33950)*0.25+(104425-68525)*0.28+(186475-104425)*0.33+(taxableIncome-186475)*0.35;
				
		}
		else if(status==3) {
			if(taxableIncome<=11950)
				tax=11950*0.1;
			else if(taxableIncome<=45500)
				tax=11950*0.1+(taxableIncome-11950)*0.15;
			else if(taxableIncome<=117450)
				tax=11950*0.1+(45500-11950)*0.15+(taxableIncome-45500)*0.25;
			else if(taxableIncome<=190200)
				tax=11950*0.1+(45500-11950)*0.15+(117450-45500)*0.25+(taxableIncome-117450)*0.28;
			else if(taxableIncome<=372950)
				tax=11950*0.1+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(taxableIncome-190200)*0.33;
			else
				tax=11950*0.1+(45500-11950)*0.15+(117450-45500)*0.25+(190200-117450)*0.28+(372950-190200)*0.33+(taxableIncome-372950)*0.35;
		}
		else {
			System.out.println("Error: invalid status");
			System.exit(1);
		}
		
		return tax;
	}
	
	
	
}

*6.16(一年的天數)

package p6;

public class S16 {

	public static void main(String[] args) {
		
		for(int year=2000; year<=2020; year++) {
			System.out.println(year+"年有 "+ numberOfDaysInAYear(year)+"天"); 
		}

	}
	
	public static  int numberOfDaysInAYear(int year) {
		int days=0;
		if(isLeapYear( year))
		return	days=366;
		else
		return	days=365;
		
	}
	
	public static boolean isLeapYear(int year) {
		
		return year%400==0 || (year%4==0 && year%100!=0);
	}
}

(6.10~6.11節)

*6.17(顯示0和1構成的矩陣)

import java.util.Scanner;

public class S17 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("請輸入 n :");
		int n=input.nextInt();
		
		printMatrix(n);

	}

	private static void printMatrix(int n) {
		
		for(int i=1; i<=n ; i++) {
			for(int j=1; j<=n; j++) {
				System.out.printf("%2d", (int) (Math.random()*2));
			}
			System.out.println();
		}
			
		
	}

}

**6.18(檢測密碼)

import java.util.Scanner;

public class S18 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("請輸入密碼  :");
		String s=input.nextLine();
		input.close();
		isPassword(s);

	}

	private static void isPassword(String s) {
		char[] ch=new char[s.length()];
		int count=0;
		int count1=0;
		
		if(s.length()>=8) {
			//先將字符串分配爲一個個字符
			for(int i=0; i<s.length(); i++) {
				ch[i]=s.charAt(i);
			}
			
			for(int i=0; i<s.length(); i++) {
				if(Character.isLetterOrDigit(ch[i])) {
					count++;//檢測每個字符都是數字和字符了嗎,若計數器的值和字符串長度一樣,則說明這個字符串裏都是字符和數字
				}
			}
			
			//若計數器的值和字符串長度一樣,則說明這個字符串裏都是字符和數字; 反之,說明這個字符串裏並不全都是數字和字符串,有些字符是其他的
			if(count == s.length()) {
				for(int i=0; i<s.length(); i++) {
						if(Character.isDigit(ch[i])) 
							count1++;
					}
				
				if(count1>=2) {
					System.out.println("Valid Password!");
				}
				else {
					System.out.println("Invalid Password.");
				}
				
				
			}
			else {
				System.out.println("Invalid Password.");
			}
				
			
		}
		else if(s.length()<8){
			System.out.println("Invalid Password.");
		}
		
	}

}

*6.19(MyTriangle 類)

package p6;

public class MyTriangle {

	public static boolean isValid(double side1, double side2, double side3) {
		return (side1+side2>side3 && side1+side3>side2 && side2+side3>side1); 
	
	}

	public static double area(double side1, double side2, double side3) {
		
		double s=(side1+side2+side3)/2;
		double area=Math.pow( s*(s-side1)*(s-side2)*(s-side3) ,0.5);
		
		return area;
		

	}
	
}
package p6;

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		
		System.out.print("請輸入第1條邊  :");
		double side1=input.nextDouble();
		System.out.print("請輸入第2條邊  :");
		double side2=input.nextDouble();
		System.out.print("請輸入第3條邊  :");
		double side3=input.nextDouble();
	
		
		if( MyTriangle.isValid(side1, side2, side3)) {
			System.out.println(MyTriangle.area(side1, side2, side3));
			
		}
		else {
			System.out.println("Invalid input.");
			//System.exit(0);
		}
	}
}

*6.20(計算一個字符串中字母的個數)

import java.util.Scanner;

public class S20 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("請輸入一個字符串:");
		String s=input.nextLine();
		input.close();
		
		System.out.println("字符串中的字母個數爲: " + countLetters(s));

	}

	public static int countLetters(String s) {
		int count=0;
		char[] ch=new char[s.length()];
		
		for(int i=0; i<s.length(); i++) {
			ch[i]=s.charAt(i);
			if(Character.isLetter(ch[i]))
				count++;
		}
		
		return count;
		
	}
}

*6.21(電話按鍵盤)

import java.util.Scanner;

public class S21 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("Enter a string: ");
		String s=input.nextLine();
		input.close();
		
		char[] ch1=new char[s.length()];
		
		for(int i=0; i<s.length(); i++) {
			ch1[i]=s.charAt(i);
			if(Character.isLetter(ch1[i])) {
				System.out.print(getNumber(ch1[i]));
			}
			else {
				System.out.print(ch1[i]);
			}
		}
		
	
	}
	
	public static int getNumber(char uppercaseLetter) {
		
		char ch=Character.toLowerCase(uppercaseLetter);
		int number=0;
		
		switch(ch) {
		case 'a':
		case 'b':
		case 'c': number=2;
					break;
		case 'd':
		case 'e':
		case 'f': number=3;
					break;
		case 'g':
		case 'h':
		case 'i': number=4;
					break;
		case 'j':
		case 'k':
		case 'l': number=5;
					break;
		case 'm':
		case 'n':
		case 'o': number=6;
					break;
		case 'p':
		case 'q':
		case 'r':
		case 's': number=7;
					break;
		case 't':
		case 'u':
		case 'v': number=8;
					break;
		case 'w':
		case 'x':
		case 'y':
		case 'z': number=9;
					break;
		}
		
		return number;
		
	}
}

**6.22(數學:平方根的近似求法)

import java.util.Scanner;

public class S22 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		
		System.out.print("請輸入一個數字:");
		long n=input.nextLong();
		
		input.close();
		
		System.out.println("該數的近似平方根爲: " + sqrt(n));

	}

	public static double sqrt(long n) {
		double lastGuess=2;//最初的猜測值可以是任意一個正值(例如,1)
		double nextGuess;
		
		
		
		do{
			nextGuess=(lastGuess + n / lastGuess) / 2 ;
			
			lastGuess=nextGuess;
			
		}while( nextGuess-lastGuess >= 0.0001 ) ;
		
		return nextGuess;
		
	}
}

*6.23(指定字符出現次數)

import java.util.Scanner;

public class S23 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("請輸入一個字符串 :");
		String str=input.nextLine();
		
		System.out.print("請輸入一個字符:");
		String s1=input.nextLine();
		input.close();
		char a=s1.charAt(0);
		
		System.out.println("字符'"+a+"'在字符串中出現次數爲: "+count(str,a));
		
		

	}

	public static int count(String str, char a) {
		int count=0;
		char[] ch1=new char[str.length()];
		
		for(int i=0; i<str.length(); i++) {
			ch1[i]=str.charAt(i);
			if(ch1[i] == a) {
				count++;
			}
		
		}
		
		return count;
	}
}

(6.10~6.12節)

**6.24(顯示當前日期和時間)

略,不會


**6.25(將毫秒數轉換成小時數、分鐘數和秒數)

import java.util.Scanner;

public class S25 {

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.print("請輸入毫秒數 :");
		long millis=input.nextLong();
		input.close();
		
		System.out.println(convertMillis(millis));

	}

	
	public static String convertMillis(long millis) {
		
		long totalSeconds=millis/1000;
		
		long seconds=totalSeconds%60;//當前秒數
		
		long totalMinutes=totalSeconds/60;
		
		long minutes=totalMinutes%60;//當前分鐘
		
		long totalHours=totalMinutes/60;
		
		long hours=totalHours%24;//當前小時
		
		return hours+":"+minutes+":"+seconds;
	}
}

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章