本章,我将给大家讲解一下如何用函数来解决简单的问题。
例1:
问题:
编写一个方法,计算一个整数各位数字之和,使用下面的方法头:
public static int sumDigits(long n)
例如:sumDigits(234),返回9(2+3+4)。
分析:
1.首先我们先定义主函数,来接受一个整数,并且调用sumDigits()方法。
2.我们来设计sumDigits()方法,来计算数字。
3.sumDigits()返回结果,主函数打印。
代码实现:
import java.util.Scanner;//导入Scanner包来实现用户输入数字
class Text{
public static void main(String[] args){
//接收数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个整数:");
Long x=scanner.nextLong();
//调用sumDigits()方法;
int sum=sumDigits(x);
System.out.println("结果是:"+sum);
}
//sumDigits()方法来实现题意中的算法
public static int sumDigits(Long n){
int temp=0;
while(n>0){
temp=(int)(temp+n%10);
n/=10;
}
return temp; //返回值
}
}
显示结果:
例二:
问题:
输出100个回文素数。回文数是指数字反过来与原数字相同,素数是值一个整数只能被1和它本身整除。每打印十个数字,换行。
分析:
1.首先,我们在主函数中用while语句来控制输出100个回文素数,然后在while循环中判断是否为回文素数,若是,则打印出来。
2.第二步,我们定义一个isPrimeNumber()方法,来判断是否为素数,再定义一个isPalindrome()方法来判断是否为回文数。
3.写出isPrimeNumber() , isPalindrome()这两个函数的具体实现代码。
代码实现:
class Text{
public static void main(String[] args){
int count=0; //控制输出100个值
int i=2; //从2开始判断
while(count<=99){
if(isPrimeNumber(i)&&isPalindrome(i)){
System.out.printf("%6d",i);
count++;
if(count%10==0){
System.out.println();
}
}
i++;
}
}
public static boolean isPrimeNumber(int i){
for(int k=2;k<=i-1;k++){
if(i%k==0){ //不是素数
return false;
}
}
return true;
}
public static boolean isPalindrome(int n){
int temp=0;
int lastn=n;
while(n>0){
temp=temp*10+n%10;
n/=10;
}
if(temp==lastn){
return true;
}else{
return false;
}
}
}
显示结果:
例三:(这道题有些复杂,希望大家认真阅读)
问题:
分析:
1.主函数的代码与上一题相似,知识判断语句变成了isFanSuShu(),判断是否为反素数
2.isFanSuShu()函数中调用了isPrimeNumber(), isPalindrome(), reverse()三个函数来判断并返回boolean类型的值给主函数。
3.isPrimeNumber()来判断啊是否为素数, isPalindrome()来判断是否为回文数, reverse()来返回反转数字。
代码实现:
class text{
public static void main(String[] args){
int count=0; //控制输出100个值
int i=2; //从2开始
while(count<=99){
//判断i是否为非回文数字,若是将其反转,判断是否为素数
if(isFanSuShu(i)){ //判断是否为反素数
System.out.printf("%-6d",i);
count++;
if(count%10==0){
System.out.println();
}
}
i++;
}
}
public static boolean isFanSuShu(int i){
//判断是否为反素数。条件:1.是素数 2.反转后也是素数3.不是回文数
return isPrimeNumber(i)&&isPrimeNumber(reverse(i))&&!isPalindrome(i);
}
public static boolean isPrimeNumber(int i){ //判断素数
for(int k=2;k<=i-1;k++){
if(i%k==0){
return false;
}
}
return true;
}
public static boolean isPalindrome(int n){ //判断是否为回文数
return reverse(n)==n;
}
public static int reverse(int number){ //将数字反转
int temp=0;
while(number>0){
temp=10*temp+(number%10);
number/=10;
}
return temp;
}
}
显示结果: