Java语言程序设计.基础篇 第六章 方法

下面附带一些第六章习题

  • 定义方法的语法如下所示:

修饰符 返回值类型 方法名( 参数列表 ) {

    // 方法体;

}

  • 函数重载

    重载函数是函数的一种特殊情况,为方便使用,Java允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。

  • 函数递归

函数自己调用自己chen称为递归

递归的三要素:

  • 一定有一种可以退出程序的情况;
  • 总是在尝试将一个问题化简到更小的规模
  • 父问题与子问题不能有重叠的部分

6.2 (求一个整数各位数字之和)编写一个方法,计算一个整数各位数字之和。使用下面的方法头:
public static int sumDigits(long n) 例如:sumDigits(234)返回 9(2+3+4). 

import java.util.*;
class Class25{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数字:");
        long n = scanner.nextLong();
        System.out.println(sumDigits(n));
    }
    public static int sumDigits(long n){    //设置计算函数
        int sum = 0;
        while(n != 0){
            long num = n%10;
            sum += num;
            n /= 10;
        }
        return sum;
    }
}

此题的输入的数字利用对10取余和除以10来进行简单计算的。

6.3  ( 回文数字)如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。 

import java.util.*;
class Class26{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int n = scanner.nextInt();
        if(isPalindrome(n)){
            System.out.println("该数是一个回文数字");
        }else{
            System.out.println("该数不是一个回文数字");
        }
    }
    public static int reverse(int number){    //这个函数是将输入进来的数字进行取反
        int revNumber = 0;
        while(number != 0){
            revNumber = revNumber*10+number%10;    //对输入的数字进行对10取余,取出个位数字,乘10是将个位数字向十位和百位转换
            number /= 10;
        }
        return revNumber;
    }
    public static boolean isPalindrome(int number){    //判断该数字是否是回文数字
        int revNumber = reverse(number);
        if(revNumber == number){
            return true;
        }
        return false;
    }
}

此题,和6.2题使用的方法一样,将进来的数字进行,对10取余取出个位数字,然将乘10往更高位上面转换,最后进行判断。

6.18  (检测密码)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。 假定密码规则如下: • 密码必须至少 8 位字符。 • 密码仅能包含字母和数字。 • 密码必须包含至少两个数字。 编写一个程序,提示用户输入一个密码,如果符合规则,则显示 Valid Password, 否则 显示 Invalid Password

import java.util.*;
class Class27{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你要注册的密码:");
        String pwd = scanner.nextLine();
        pwd(pwd);
    }
    public static void pwd(String pwd){
        int numCount = 0;
        if(pwd.equals("")){    //判断输入的密码是否为空
            System.out.println("密码不能为空");
            return;
        }else if(pwd.length()<7){    //判断长度
            System.out.println("密码长度至少8位");
            return;
        }
        for(int i=0;i<pwd.length();i++){
            if(pwd.charAt(i)<48||(pwd.charAt(i)>57 && pwd.charAt(i)<65)||(pwd.charAt(i)>90 && pwd.charAt(i)<97)||pwd.charAt(i)>122){    //判断输入的密码是否是正确的输入
                System.out.println("密码必须是包含数字和字母");
                return;
            }else if(pwd.charAt(i)>=48 && pwd.charAt(i)<=57){
                numCount++;
            }
        }
        if(numCount<2){
            System.out.println("密码至少有两个数字");
            return;
        }
        System.out.println("Valid Passwoed");
    }
}

本题比较麻的地方在如何判断密码在正确范围里面,所以我们先要判断它的长度,然后再是密码的范围,密码的范围可以通过ASCⅡ表来判断。

6.26  (回文素数)回文素数是指一个数同时为素数和回文数。

import java.util.*;
class Home26{
    public static void main(String[] args){
        if(isHuiWenSuShu(InitData())){
            System.out.println("该数是回文素数");
        }else{
            System.out.println("不是回文素数");
        }
    }
    public static int InitData(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数字:");
        return scanner.nextInt();
    }
    public static boolean isHuiWenSuShu(int num){
        return isHuiWen(num)&&isSuShu(num);
    }
    public static boolean isHuiWen(int num){
        if(reverse(num)==num){
            return true;
        }
        return false;
    }
    public static int reverse(int num){
        int revNum = 0;
        while(num!=0){
            revNum = revNum*10+num%10;
            num /= 10;
        }
        return revNum;
    }
    public static boolean isSuShu(int num){
        boolean flag=true;
        for(int i=2;i<=num/2;i++){
            if(num%2==0){
                flag = false;
                break;
            }
        }
        return flag;
    }
}

本题的思路是将输入进来的数字先进行反转,然后判断是否是回文数字,判断回文数字和上述的题目一样;如果是,进行下一步判断,是否是素数,可以通过对2取余,如果是零说明不是素数,否则是,然后结合之前判断的回文数字,两者结合得出结论。

6.30 掷双骰子游戏是赌场中非常流行的骰子游戏,编写对应的程序

import java.util.*;
class Home27{
    public static void main(String[] args){
        Add();
    }
    public static void Add(){
        Random random = new Random();
        int crapsA = random.nextInt(6)+1;
        int crapsB = random.nextInt(6)+1;
        int add = crapsA+crapsB;
        if((add>=4&&add<=6)||(add>=8&&add<=10)){    
            System.out.println("你掷出的是"+crapsA+"+"+crapsB+"="+add);
            System.out.println("点数是"+add);
            twoAdd(add);    //如果在上述if的条件里面则执行第二次的掷骰子
        }
        if(add==2 || add==3 || add==12){    //如果是2,3和12,用户输
            System.out.println("你掷出的是"+crapsA+"+"+crapsB+"="+add);
            System.out.println("你输了");
        }else if(add==7 || add==11){    //如果是7和11,用户赢
            System.out.println("你掷出的是"+crapsA+"+"+crapsB+"="+add);
            System.out.println("你赢了");
        } 
    }
    public static void twoAdd(int add){    //函数执行第二次投掷骰子
        Random random = new Random();
        int crapsA2 = random.nextInt(6)+1;
        int crapsB2 = random.nextInt(6)+1;
        int add2 = crapsA2+crapsB2;
        if(add==add2){    //如果相加的和与上次相等,用户赢
            System.out.println("你掷出的是"+crapsA2+"+"+crapsB2+"="+add2);
            System.out.println("你赢了");
            return;
        }else if(add2==7){    //等于7时,用户输
            System.out.println("你掷出的是"+crapsA2+"+"+crapsB2+"="+add2);
            System.out.println("你输了");
            return;
        }
        while(true){    //如果在上述范围外的话,则继续执行twoAdd函数,直到与上述判断相等
            twoAdd(add);
            break;
        }
    }
}

这道题比较复杂在第二次的投掷骰子上面,如果第二次投掷的数字之和与第一次之和相等,则用户赢,如果等于7,用户输,如果都没有在这两个条件里面的话,则继续执行twoAdd函数,也就是递归,直到遇到跳出的条件。

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值