作业(第六章:方法)

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("\n");
			}
		}
	}
}

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的素数的个数。

posted @ 2017-12-15 14:59  微微_echo  阅读(1383)  评论(0编辑  收藏  举报