6.1(数学:五角数)
一个五角数被定义为n(3n-1)/2,其中n=1,2,...。所以,开始的几个数字就是1,5,12,22...,编写下面的方法返回一个五角数:
public static int getPentagonalNumber(int n)
编写一个测试程序显示前100个无角数,每行显示10个。
package com.echo.work6;
public class GetPentagonalNumber {
public static int getPentagonalNumber(int n) {
return (n * (3 * n - 1)) / 2;
}
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
int num = getPentagonalNumber(i);
System.out.print(num + " ");
if (i % 10 == 0) {
System.out.println("
");
}
}
}
}
6.2(求一个整数各位数字之和)
编写一个方法,计算一个整数各位数字之和。使用下面的方法头:
public static int sumDigits(long n)
例如:sumDigits(234)返回9(2+3+4)
提示:使用求余操作符%提取数字,用除号/去掉提取出来的数字。例如:使用234%10(=4)抽取4。然后使用234/10(=23)从234中去掉4.使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。
编写程序提示用户输入一个整数,然后显示这个整数所有数字的和。
package com.echo.work6;
import java.util.Scanner;
public class SumDigits {
public static int sumDigits(long n) {
int sum = 0;
while (n != 0) {
int m = (int) (n % 10);
sum += m;
n = n / 10;
}
return sum;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = input.nextInt();
System.out.println(sumDigits(number));
}
}
6.3(回文整数)
使用下面的方法头编写两个方法:
// return the reversal of an integer, i.e., reverse(456) returns 654
public static int reverse(int number)
// return true if number is a palindrome
public static boolean isPalindrome(int number)
使用reverse方法实现isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这个数就称为回文数。编写一个测试程序,提示用户输入一个整数值,然后报告这个整数是否是回文数。
p1:
package com.echo.work6;
import java.util.Scanner;
public class TestPalindrome {
public static int reverse(int number) {
int temp = 0;
while (number != 0) {
temp *= 10;
temp += number % 10;
number /= 10;
}
return temp;
}
public static void isPalindrome(int number) {
if (number == reverse(number)) {
System.out.println("是回文数");
} else {
System.out.println("不是回文数");
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = input.nextInt();
isPalindrome(number);
}
}
p2:
package com.echo.work6;
import java.util.Scanner;
public class TestPalindrome {
public static void reverse(int number) {
while (number != 0) {
int remainder = number % 10;
System.out.print(remainder);
number = number / 10;
}
}
public static void isPalindrome(int number) {
if (number == reverse(number)) {
System.out.println("是回文数");
} else {
System.out.println("不是回文数");
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = input.nextInt();
isPalindrome(number);
}
}
6.4(反向显示一个整数)
使用下面的方法头编写方法,反向显示一个整数:
public static int reverse(number)
例如:reverse(3456)返回6543。编写一个测试程序,提示用户输入一个整数,然后显示它的反向数。
package com.echo.work6;
import java.util.Scanner;
public class ReverseNumber {
public static int reverse(int number) {
int temp = 0;
while (number != 0) {
temp *= 10;
temp += number % 10;
number = number / 10;
}
return temp;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = input.nextInt();
System.out.println(number + "反向数为:" + reverse(number));
}
}
6.5(对三个数排序)
使用下面的方法头编写方法,按升序显示三个数:
public static void displaySortedNumbers(double num1, double num2, double num3)
编写测试程序,提示用户输入三个数字,调用方法以升序显示他们。
package com.echo.work6;
import java.util.Arrays;
import java.util.Scanner;
public class DisplaySortedNumbers {
public static void displaySortedNumbers(double num1, double num2, double num3) {
double sort[] = { num1, num2, num3 };
Arrays.sort(sort);
for (int i = 0; i < sort.length; i++) {
System.out.print(sort[i] +" ");
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入三个数:");
double num1 = input.nextDouble();
double num2 = input.nextDouble();
double num3 = input.nextDouble();
displaySortedNumbers(num1, num2, num3);
}
}
6.6(显示图案)
编写方法显示如下图案:
1
21
321
n n-1 321
该方法头为:
public static void displayPattern(int n)
package com.echo.work6;
import java.util.Scanner;
public class DisplayPattern {
public static void displayPattern(int n) {
for (int row = 1; row <= n; row++) {
// Print spaces
for (int i = row; i < n; i++) {
System.out.print(" ");
}
// Print numbers
for (int i = row; i >= 1; i--) {
System.out.print(" " + i);
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入行号:");
int lineNumber = input.nextInt();
displayPattern(lineNumber);
}
}
6.7(财务应用程序:计算未来投资价值)
编写一个方法,计算按照给定的年数和利率计算未来投资值,未来投资是用编程练习题2.21中的公式计算得到的。
未来投资金额 = 投资总额 * (1 + 月利率)^年数*12
例如:如果输入的投资金额为1000,年利率为3.25%,年数为1,那么未来投资额为1032.98。
使用下面的方法头:
public static double futureInvestmentValue(double investmentAmount , double monthlyInterestRate , int years)
例如:futureInvestmentValue(10000, 0.05/12, 5)返回12833.59
编写一个测试程序,提示用户输入投资额(例如1000)、利率(例如9%),然后打印年份从1到30年的未来投资值,如下所示:
The amount invested: 1000
Annual interest rate: 9
Years Future Value
1 1093.80
2 1196.41
...
29 13467.25
30 14730.57
6.8(摄氏度和华氏度之间的转化)
编写一个类,包含下面两个方法:
Convert from Celsius to Fahrenheit
public static double celsiusToFahrenheit(double celsius)
Convert from Fahrenheit to Celsius
public static double fahrenheitToCelsius(double fahrenheit)
转换公式如下:
华氏度 = (9.0 / 5) * 摄氏度 + 32
摄氏度 = (5.0 / 9) * (华氏度 - 32)
编写一个测试程序,调用这两个方法来显示如下表格:
摄氏度 | 华氏度 |
---|---|
40.0 | 104.0 |
39.0 | 102.2 |
华氏度 | 摄氏度 |
---|---|
120.0 | 48.89 |
110.0 | 43.33 |
package com.echo.work6;
import java.util.Scanner;
public class ConvertCelsiusFahrenheit {
// Convert from Celsius To Fahrenheit
public static double celsiusToFahrenheit(double celsius) {
return ((9.0 / 5) * celsius) + 32;
}
// Convert from fahenheit
public static double fahrenheitToCelsius(double fahrenheit) {
return (5.0 / 9) * (fahrenheit - 32);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入摄氏度:");
double celsius = input.nextDouble();
System.out.println(celsius + ": " + celsiusToFahrenheit(celsius));
System.out.println("请输入华氏度:");
double fahrenheit = input.nextDouble();
System.out.println(fahrenheit + ": " + fahrenheitToCelsius(fahrenheit));
}
}
6.9(英尺和米之间的转换)
编写一个类,包含如下两个方法:
//Convert from feet to meters
public static double feetToMeter(double feet)
//Convert from meters to feet
public static double metersToFeet(double meters)
转换公式如下:
米 = 0.305 * 英尺
英尺 = 3.279 * 米
编写一个测试程序,调用这两个方法以显示下面的表格:
英尺 | 米 |
---|---|
1.0 | 0.305 |
2.0 | 0.610 |
米 | 英尺 |
---|---|
20.0 | 65.574 |
25.0 | 81.967 |
package com.echo.work6;
import java.util.Scanner;
public class ConvertFeetMeters {
// Convert from feet to meters
public static double feetToMeters(double feet) {
return 0.305 * feet;
}
// Convert from meters to feet
public static double metersToFeet(double meters) {
return 3.279 * meters;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入米数:");
double meters = input.nextDouble();
System.out.println(meters + ": " + metersToFeet(meters));
System.out.println("请输入英尺数:");
double feet = input.nextDouble();
System.out.println(feet + ": " + feetToMeters(feet));
}
}
6.10(使用isPrime方法)
程序清单6-7提供了测试某个数字是否是素数的方法isPrime(int number)。使用这个方法求小于10000的素数的个数。