java练习题

1.编写一个程序,帮助小学生学习乘法表,利用Math.random产生两个一位正整数,该程序应在控制台中显示一个如下的问题:

6*7等于多少?

学生应在文本字段中输入答案,在程序中检查文本答案,如果答案正确,则在控制台中输出字符串“非常好!”然后提问另一个乘法问题。如果答错了,则在控制台中绘制字符串“错,请重试”然后让学生反复练习同样的问题直到回答正确位置,应当使用一个单独方法来产生每个新问题。当程序开始运行时,如果每次用户回答正确,则应调用该方法一次。输入-1代表退出.

public class Main {
    public static int askQuestion()
    {
        int a=(int)(Math.random()*10);
        Random random=new Random();
        int b=random.nextInt(10);//与上面一行在一起执行也是随机数一种的写法,其中10为0~10
        System.out.println(a+"*"+b+"等于多少?");
        return a*b;//返回a*b的值
    }

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int answer=askQuestion();//将askQuestion 赋值给 answer    也就是说answer是a*b的答案
        while (true)//死循环的意思
        {
            System.out.println("输入-1结束程序");
            int user_answer=scanner.nextInt();//用户输入的答案 user_answer使用户输入的答案
            if (user_answer==-1)//如果用户输入-1 则执行break退出循环命令
            {
                break;
            }
            if (user_answer==answer)//如果答案等于用户处输入的答案
            {
                System.out.println("非常棒!");
                answer=askQuestion();//答案
            }
            else
            {
                System.out.println("错,请重试");
            }
        }
        System.out.println("退出程序");
    }
}

2.计算机在教育中的应用称之为计算机辅助教学(CAI)。在开发CAI环境中遇到一个问题就是学生容易疲劳,可通过变换计算机的对话来保持学生的

注意力,从而消除疲劳,修改练习1中的程序,为每个正确和不正确的答案打印各种评语,对正确的答案的评语如下所示:
Very good!非常好
Excellent!特别好
Nice work!做的好
Keep up the good work! 做的好,继续保持
对不正确的评语如下所以:
No.Please try again. 错,请重试
Wrong.Try once more. 错,再试试
Don't give up! 别放弃
Nn.keep trying. 保持尝试
利用随机产生器来选择1到4中的一个数,从而给出对于每个答案一个恰当评语。

public class Question {

    static String[] good = {"非常好","特别好","做的好","做的好,继续保持"};
    static String[] error = {"错,请重试","错,再试试","别放弃","保持尝试"};

    public static int askQuestion()
    {
        //产生2个10以内随机整数(乘数和被乘数)
        int a = (int)(Math.random() * 9)+1;
        Random random = new Random();
        int b = random.nextInt(9)+1;
        System.out.println(a+"*"+b+"等于多少?");
        return a*b;
    }

    public static void main(String[] args) {

         Scanner scanner = new Scanner(System.in);
        int answer = askQuestion();//答案
        while (true)
        {
            System.out.println("输入-1退出程序");

            int user_answer = scanner.nextInt();
            if(user_answer == -1)
            {
                break;
            }

            if(answer == user_answer)
            {
                Random random = new Random();
                int index = random.nextInt(4);
                System.out.println(good[index]);
                answer = askQuestion();//答案
            }
            else//打错了,需要重新出刚才那道题
            {

                Random random = new Random();
                int index = random.nextInt(4);
                System.out.println(error[index]);
            }

        }

        System.out.println("程序退出");
    }
}

3.编写一个程序,按照如下规则玩“猜数游戏”:在程序中,通过选择一个1——1000的整数之间随机数来确定要猜的数。程序在一个文本字段旁显示提示:
猜一个1-1000之间的数

玩家在文本字段中输入第一个数并按下回车键。如果玩家猜错了,程序应当在状态栏中显示“太大了,再试”或者“太小了再试”,帮助玩家“接近”正确答案并清除文本字段,以便用用户能输入下一个猜测的数。当用户输入了正确答案后,就显示“祝贺你,猜对了”,在控制台中清除文本字段以便用户可以再次进行游戏。提示:这个问题种使用查找技术称为二分查找(binary search)。

public class GuessNumber {
    public static void main(String[] args) {
        Random random = new Random();
        int guessnum = random.nextInt(1000)+1;//生成一个随机数,让用户猜

//        System.out.println(guessnum);
        int guessCount = 0;//记录用户猜了多少次
        Scanner scanner = new Scanner(System.in);
        System.out.println("请猜数");
        int input = scanner.nextInt();//用户第一次输入答案
        guessCount++;
        while (input != guessnum)
        {
            if(input > guessnum)
            {
                System.out.println("太大了");
            }
            else
            {
                System.out.println("太小了");
            }
            guessCount++;
            System.out.println("请猜数");
            input = scanner.nextInt();//让用户再次输入答案
        }

        System.out.println("程序退出,一共用了"+ guessCount + "次");

    }
}

4.(航空订票系统)一家小型航空公司刚购买一台计算机,用于其最新的自动订票系统,要求编写新的程序,为该公司唯一一架飞机(运量:10

)的每次飞行安排座位,程序应当显示下列选项:
Please type 1 for "smoking"(吸烟区请安1)
Please type 2 for "nonsmoking"(无烟区请安2)
如果某人按下1,那么程序应当在吸烟舱(1——5)为其分配一个座位。如果某人按下2,那么程序应当在无烟舱为其分配一个座位(6——10)。在

程序中应打印出一张登记卡,以表明此人的座号以及他在飞机的吸烟舱还是无烟舱。用一个单下标数组描述飞机的订票情况,将所有的数组元素初始

化为0,表明所有座位都是空的。在分配一个座位后,设置数组的相应元素为1,则该座位不能再分配,
程序中当然不应分配已分配的座位。当吸烟舱客满后程序应当询问此人是否接受安排的无烟区,反之亦然。如果回答肯定,那么应当进行适当的座位

安排。如果回答否定,那么打印消息“Next flight leaves in 3 hours.”(下次航班三小时后起飞)。

public class FlyOrderTicket {

    
    
    public static void main(String[] args) {

        int[] seats = new int[10];//代表10个空闲座位,其中1-5是吸烟区,6-10是无烟区
        Scanner scanner = new Scanner(System.in);

        while (true)
        {
            System.out.println("吸烟区请安1,无烟区请安2,退出按-1");
            int command = scanner.nextInt();
            if(command == -1)
            {
                break;
            }
            else if(command == 1)//在吸烟区给用户分配一个座位
            {
                int i;
                for(i = 0; i < 5; i++)
                {
                    //考察座位是否已经被分配出去了
                    if(seats[i] == 0)//当前座位可以分配
                    {
                        seats[i] = 1;//分配出去了该座位
                        System.out.println("你的座号是"+(i+1) + "在吸烟区");//打印登记卡
                        break;
                    }
                }

                if(i == 5)//没有在吸烟区找到空余座位
                {
                    System.out.println("吸烟区无座位了,是否接受无烟区的座位?");
                    String answer = scanner.next();
                    if(answer.equals("是"))//在无烟区分配座位
                    {
                        int j;
                        for(j = 5; j < 10; j++)
                        {
                            //考察座位是否已经被分配出去了
                            if(seats[j] == 0)//当前座位可以分配
                            {
                                seats[j] = 1;//分配出去了该座位
                                System.out.println("你的座号是"+(j+1) + "在无烟区");//打印登记卡
                                break;
                            }
                        }

                        if(j==10)//无烟区也没有座位了
                        {
                            System.out.println("下次航班三小时后起飞");
                        }

                    }
                    else
                    {
                        System.out.println("下次航班三小时后起飞");
                    }
                }

            }
            else if(command == 2)//在无烟区分配座位
            {
                int j;
                for(j = 5; j < 10; j++)
                {
                    //考察座位是否已经被分配出去了
                    if(seats[j] == 0)//当前座位可以分配
                    {
                        seats[j] = 1;//分配出去了该座位
                        System.out.println("你的座号是"+(j+1) + "在无烟区");//打印登记卡
                        break;
                    }
                }
                if(j==10)//无烟区没有座位了
                {
                    System.out.println("无烟区无座位了,是否接受吸烟区的座位?");
                    String answer = scanner.next();
                    if (answer.equals("是"))//在无烟区分配座位
                    {
                        int i;
                        for (i = 0; i < 5; i++) {
                            //考察座位是否已经被分配出去了
                            if (seats[i] == 0)//当前座位可以分配
                            {
                                seats[i] = 1;//分配出去了该座位
                                System.out.println("你的座号是" + (i + 1) + "在吸烟区");//打印登记卡
                                break;
                            }
                        }

                        if (i == 5)//吸烟区也没有座位了
                        {
                            System.out.println("下次航班三小时后起飞");
                        }
                    }
                }

            }

        }

        System.out.println("谢谢使用");

    }
}

方法提取版

public class FlyOrderTicket {
    static int[] seats = new int[10];//代表10个空闲座位,其中1-5是吸烟区,6-10是无烟区


    public static int allocSeats(int start, int end)
    {
        String strArea = "吸烟区";
        if(end == 10)
        {
            strArea = "无烟区";
        }
        int i;
        for(i = start; i < end; i++)
        {
            //考察座位是否已经被分配出去了
            if(seats[i] == 0)//当前座位可以分配
            {
                seats[i] = 1;//分配出去了该座位
                System.out.println("你的座号是"+(i+1) + "在" + strArea);//打印登记卡
                break;
            }
        }
        return i;
    }

    public static void main(String[] args) {


        Scanner scanner = new Scanner(System.in);

        while (true)
        {
            System.out.println("吸烟区请安1,无烟区请安2,退出按-1");
            int command = scanner.nextInt();
            if(command == -1)
            {
                break;
            }
            else if(command == 1)//在吸烟区给用户分配一个座位
            {
                int i = allocSeats(0,5);

                if(i == 5)//没有在吸烟区找到空余座位
                {
                    System.out.println("吸烟区无座位了,是否接受无烟区的座位?");
                    String answer = scanner.next();
                    if(answer.equals("是"))//在无烟区分配座位
                    {
                        int j = allocSeats(5,10);


                        if(j==10)//无烟区也没有座位了
                        {
                            System.out.println("下次航班三小时后起飞");
                        }

                    }
                    else
                    {
                        System.out.println("下次航班三小时后起飞");
                    }
                }

            }
            else if(command == 2)//在无烟区分配座位
            {
                int j = allocSeats(5,10);

                if(j==10)//无烟区没有座位了
                {
                    System.out.println("无烟区无座位了,是否接受吸烟区的座位?");
                    String answer = scanner.next();
                    if (answer.equals("是"))//在无烟区分配座位
                    {
                        int i = allocSeats(0,5);

                        if (i == 5)//吸烟区也没有座位了
                        {
                            System.out.println("下次航班三小时后起飞");
                        }
                    }
                }

            }

        }

        System.out.println("谢谢使用");

    }
}

5.某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,5698234 --》 4328965 ---》9873410 -- 》 0873419
在传递过程中需要加密,加密规则如下:

 首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
 然后,把加密后的结果在控制台打印出来。 
public class JiaMi {
    public static void main(String[] args) {
        int index = 0; //数组当前的下标
        int[] array = new int[8];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要加密的数");
        int num = scanner.nextInt();//--》 4328965
        //将数倒序,保存到数组中
        while (num != 0)
        {
            array[index] = num % 10;
            index++;
            num = num / 10;
        }

        for(int i = 0; i < index; i++)
        {
            array[i] = (array[i] + 5) % 10; //每位数字都加上5,再用和除以10的余数代替该数字
        }

         //最后将第一位和最后一位数字交换
        int temp = array[0];
        array[0] = array[index - 1];
        array[index - 1] = temp;

        for(int i = 0; i < index; i++)
        {
            System.out.print(array[i]);
        }

        return;
    }
}

你可能感兴趣的:(java练习题)