1、 Java第六章程序清单 24 2020年4月19日 文档仅供参考 习题6.2(求一个整数各位数之和) import java.util.Scanner; public class sumIf { public static void main(String[] args) { // TODO Auto-generated method stub System.out.print("请输入一个整数:"); Scanner input = new Scanner(System.in); long n =
2、 input.nextInt(); System.out.print("输入的整数i=" + n + "的各个数字的和是" + sumDigits(n)); } public static long sumDigits(long k){ long sum = 0; while( k != 0) { sum += k % 10; k /= 10; } return sum; } } 习题6.4(反向显示一个整数) import java.util.Scanner; public class reverse {
3、 public static void main(String[] args) { // TODO Auto-generated method stub System.out.print("请输入一个整数"); Scanner input = new Scanner(System.in); int number1 = input.nextInt(); reverse(number1); } public static int reverse(int number) { int i; while(num
4、ber != 0){ System.out.print(number%10); number /= 10; } return 0; } } 习题6.6(显示图案,此方法只能在10以内对其) import java.util.*; public class displayPattern1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.print("请输入一个整数"); Sca
5、nner input = new Scanner(System.in); int n = input.nextInt(); displayPattern(n); } public static void displayPattern(int i) { for(int j = 1; j <= i; j++) { for(int k = 0; k < i-j; k++) { System.out.print(" "); //if(j >= 10)System.out.print(" "); } for(in
6、t k = j; k > 0; k--) { System.out.print(k + " "); } System.out.println(); } } } 程序清单6-1(调用max方法) public class TestMax { public static void main(String[] args) { // TODO Auto-generated method stub int i = 5; int j = 2; int k = max(i, j); System.out.println(
7、"the maxinum of " + i + " and " + j + " is " + k); } public static int max(int num1, int num2) { int result; if (num1 > num2) result = num1; else result = num2; return result; } } 程序清单6-2(void方法示例,打印给定分数的等级) public class TestVoidMethod { public static void ma
8、in(String[] args) { // TODO Auto-generated method stub System.out.print("The grade is "); printGrade(78.5); System.out.print("The grade is "); printGrade(59.5); } public static void printGrade(double score) { if(score >=90.0) { System.out.println('A'); } else i
9、f(score >=80.0) { System.out.println('B'); } else if(score >=70.0) { System.out.println('C'); } else if(score >=60.0) { System.out.println('D'); } else { System.out.println('F'); } } } 程序清单6-3(void方法的示例,与程序清单做对比,打印一个分数的等级) public class TestReturnVoidMe
10、thod { public static void main(String[] args) { System.out.print("The frade is " + getGrade(78.5)); System.out.print("\nThe frade is " + getGrade(59.5)); } public static char getGrade(double score) { if (score >= 90) return 'A'; else if (score >= 80) return 'B'; else
11、if (score >= 70) return 'C'; else if (score >= 60) return 'D'; else return 'F'; } } 程序清单6-4(经过传值进行参数传递) public class Increment { public static void main(String[] args) { // TODO Auto-generated method stub int x = 1;; System.out.println("Before the call, x is"
12、 x); increment(x); System.out.println("After the call, x is" + x); } public static void increment(int n) { n++; System.out.println("n inside the method is " + n); } } 程序清单6-5(按值传递参数) public class TestPassByValue { public static void main(String[] args) { // TODO Aut
13、o-generated method stub int num1 = 1; int num2 = 2; System.out.println("Before invoking the swap method, num1 is " + num1 +" and num2 is " + num2); swap(num1,num2); System.out.println("After invoking the swap method, num1 is " + num1 + " and num2 " + num2); } pu
14、blic static void swap(int n1, int n2) { System.out.println("\tIside the method"); System.out.println("\t\tBefore swapping, n1 is " + n1 + " and n2 is " + n2); int temp = n1; n1 = n2; n2 = temp; System.out.println("\t\tAfter swapping, n1 is " + n1 + " and n2 is " + n2); }
15、 } 程序清单6-6(程序模块化_求最大公约数) import java.util.Scanner; public class GreatestCommonDivisorMethod { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Enter first integer: "); int n1 = input.nextI
16、nt(); System.out.print("Enter scond integer: "); int n2 = input.nextInt(); System.out.println("The greatest common divisor for " + n1 + " and " + n2 + " is " + gcd(n1, n2)); } public static int gcd(int n1, int n2) { int gcd = 1; int k = 2; while (k <= n1 && k <= n2)
17、{ if (n1 % k ==0 && n2 % k == 0) gcd = k; k++; } return gcd; } } 程序清单6-7(程序模块化,打印50以内的素数,输出结果与书上不一致) public class PrimeNumberMethod { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("The first 50 prime numbers are \
18、n"); printprimeNumbers(50); } public static void printprimeNumbers(int numberOfPrimes) { final int NUMBER_OF_PRIMES_PER_LINE = 10; int count = 0; int number = 2; while(count < numberOfPrimes) { if(isPrime(number)) { count++; } if(count % NUMBER_OF_PRIMES_PER
19、LINE == 0) { System.out.printf("%-5s\n", number); } else System.out.printf("%-5s", number); number++; } } public static boolean isPrime (int number){ for(int divisor = 2; divisor <= number / 2 ; divisor++) { if(number % divisor == 0) return false; }
20、 return true; } } 程序清单6-8(将16进制转换为十进制) import java.util.Scanner; public class Hex2Dec { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Enter a hex number: "); String hex = input.ne
21、xtLine();//Sting是什么, input.nextLine又是什么 System.out.println("The decimal value for hex number " + hex + " is " + hexToDecimal(hex.toUpperCase())); } public static int hexToDecimal(String hex) { int decimalValue = 0; for (int i = 0; i < hex.length(); i++) {//hex.length是什么 char
22、hexChar = hex.charAt(i);//hex.charAt(i)是什么 decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar); } return decimalValue; } public static int hexCharToDecimal(char ch) { if(ch >= 'A' && ch <= 'F') return 10 + ch - 'A'; else return ch - '0'; } } 程序清单6-9(重载方法
23、 求最大值) public class TestMethodOverloading { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("The maxmum of 3 and 4 is " + max(3, 4)); System.out.println("The maxmum of 3.0 and 5.4 is " + max(3.0, 5.4)); System.out.println("The maxmum
24、 of 3.0, 4.5 and 10.14 is " + max(3.0, 5.4, 10.14)); } public static int max(int num1, int num2) { if (num1 > num2) return num1; else return num2; } public static double max(double num1, double num2) { if(num1 > num2) return num1; else return num2; }
25、 public static double max(double num1, double num2, double num3) { return max(max(num1, num2), num3); } } 程序清单6-10(生成随机字符) public class RandomCharacter { public static char getRandomCharacter(char ch1, char ch2) { return (char)(ch1 + Math.random() * (ch2 - ch1 + 1)); }
26、public static char getRandomLowerCaseLetter() { return getRandomCharacter('a', 'z'); } public static char getRandomUpperCaseLetter() { return getRandomCharacter('A', 'Z'); } public static char getRandomDigtCharacter() { return getRandomCharacter('0', '9'); } public stati
27、c char getRandimCharacter() { return getRandomCharacter('\u0000', '\uFFFF'); } } 程序清单6-11(生成随机数,调用了6-10的方法) public class TestRandomCharacter { public static void main(String[] args) { // TODO Auto-generated method stub final int NUMBER_OF_CHARS = 175; final int CHARS_PER_LIN
28、E = 25; for(int i = 0; i < NUMBER_OF_CHARS; i++) { char ch = RandomCharacter.getRandomLowerCaseLetter(); if((i + 1) % CHARS_PER_LINE == 0) System.out.println(ch); else System.out.print(ch); } } } 程序清单6-12(方法抽象,逐步求精) import java.util.Scanner; public class P
29、rintCalendar { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.print("Enter full yuer (e.g., ): "); int year = input.nextInt(); System.out.print("Enter month as a number between 1 and 12: ");
30、 int month = input.nextInt(); printMonth(year, month); } public static void printMonth(int year, int month) { printMonthTitle(year, month); printMonthBody(year, month); } public static void printMonthTitle(int year, int month) { System.out.println(" " + ge
31、tMonthName(month) + " " + year); System.out.println("---------------------"); System.out.println(" Sun Mon Tue Wed Tue Fri Sat"); } public static String getMonthName(int month) { String monthName = ""; switch (month) { case 1: monthName = "January"; break; case 2: monthNa
32、me = "Fanuary"; break; case 3: monthName = "March"; break; case 4: monthName = "April"; break; case 5: monthName = "May"; break; case 6: monthName = "June"; break; case 7: monthName = "July"; break; case 8: monthName = "August"; break; case 9: monthName = "September"; break;
33、case 10: monthName = "October"; break; case 11: monthName = "November"; break; case 12: monthName = "December"; break; } return monthName; } public static void printMonthBody(int year, int month) { int startDay = getStartDay(year, month); int numberOfDaysInMonth = get
34、NumberOfDaysInMonth(year, month); int i = 0; for(i = 0; i < startDay; i++) { System.out.print(" "); } for(i = 0; i <= numberOfDaysInMonth; i++) { System.out.printf("%4d", i); if((i + startDay) % 7 == 0) System.out.println(); } System.out.println();
35、 } public static int getStartDay(int year, int month) { final int START_DAY_FOR_JAN_1_1800 = 3; int totalNumberOfDays = getTotalNumberOfDays(year, month); return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7; } public static int getTotalNumberOfDays(int year, int mont
36、h) { int total = 0; for(int i = 1800; i < year; i++) if(isLeapYear(i)) total = total + 366; else total = total + 365; for(int i = 1; i < month; i++) total = total + getNumberOfDaysInMonth(year , i); return total; } public static int getNumberOfDay
37、sInMonth(int year, int month) { if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) return 31; if(month == 4 || month == 6 || month == 9 || month == 11) return 30; if(month == 2) return isLeapYear(year) ? 29:28; return 0; } public static boolean isLeapYear(int year) { return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); } }






