美文网首页
java练习题

java练习题

作者: 赵小莹 | 来源:发表于2018-01-04 15:09 被阅读0次

1.编写一个程序,帮助小学生学习乘法表,利用Math.random产生两个一位的正整数,该程序应在控制台中显示一个如下的问题:6*7等于多少?
学生应在文本字段中输入答案,在程序中检查文本答案,如果答案正确,则在控制台中输出字符串“非常好!”然后提问另一个乘法问题。如果答错了,则在控制台中绘制字符串“错,请重试”然后让学生反复练习同样的问题直到回答正确位置,应当使用一个单独方法来产生每个新问题。当程序开始运行时,如果每次用户回答正确,则应调用该方法一次。输入-1代表退出。

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int answer = ask();//输出答案
        while(true)//死循环
        {
            System.out.println ("输入-1退出程序");
            int userinput = scanner.nextInt();

            if(userinput == -1)
            {
                break;
            }
            else  if(answer == userinput)
            {
                System.out.println ("very good");
                answer = ask();//可以继续打印下一个随机的题
            }
            else
            {
                System.out.println ("try again");
            }
        }
        System.out.println ("程序退出");
        
    }

    public static int ask()
    {
        int a = (int)(Math.random ()*9+1);//产生随机数1~10
        Random random =new Random();
        int b=random.nextInt(9)+1;//两行也是产生随机数1~10
        System.out.println (a+ "*" +b + "等于多少");
        return a*b;
    }

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!
No.keep trying.
利用随机产生器来选择1到4中的一个数,从而给出对于每个答案一个恰当评语。

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

    public static int ask()
    {
        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 = ask();
        while(true)
        {
            System.out.println("输入-1退出程序");
            int input =scanner.nextInt();
            if(input == -1)
            {
                break;
            }
            if(input == answer)
            {
                int index = (int)(Math.random()*4);
                System.out.println(good[index]);
                answer = ask();
            }
            else
            {
                int index = (int)(Math.random()*4);
                System.out.println(error[index]);
                answer = ask();
            }
        }
        System.out.println("退出程序");

3.编写一个程序,按照如下规则玩“猜数游戏”:在程序中,通过选择一个1——1000的整数之间随机数来确定要猜的数。程序在一个文本字段旁显示提示:
猜一个1-1000之间的数
玩家在文本字段中输入第一个数并按下回车键。如果玩家猜错了,程序应当在状态栏中显示“太大了,请再试” 或者 “太小了,请再试” 帮助玩家“接近”正确答案并清除文本字段,以便用户能输入下一个猜测的数。当用户输入了正确答案后,就显示“祝贺你,猜对了”,在控制台中清除文本字段以便用户可以再次进行游戏。提示:这个问题种使用查找技术称为二分查找(binary search)。

 public static void main(String[] args) {
        Random random =new  Random();
        int guessnum = random.nextInt(1000)+1;//生成一个1-1000之间的随机数
        Scanner scanner =new  Scanner(System.in);
        System.out.println("请猜数");
        int num =scanner.nextInt();//用户第一次输入的数
        int guessCount = 0 ;//用户猜了多少次
        while(num != guessnum)
        {
            if(num > guessnum)
            {
                System.out.println("太大了");
            }
            else
            {
                System.out.println("太小了");
            }
            guessCount++;
            System.out.println("go on guess");
            num =scanner.nextInt();//为了让程序卡在这可以继续输入猜的数
        }
        System.out.println("程序退出,一共用了"+ guessCount + "次");
        
    }

二分法就是2的N次幂,1000之内的随机数接近1024也就是2的10次幂,所以10次之内肯定可以猜出来
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 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 input = scanner.nextInt();//代表用户输入,让程序卡在这
            if(input == -1)
            {
               break;
            }

            else if(input == 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("yes")) {
                        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 if(input == 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("yes")) {
                        int i;
                        for (i = 5; i < 10; i++) {
                            if (seats[i] == 0) {
                                seats[i] = 1;
                                System.out.println("你的座号是" + (i + 1) + "在吸烟区");
                                break;
                            }
                        }
                        if ( i== 5) {
                            System.out.println("下次航班三小时后起飞");
                        }
                    }
                }


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

5.某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,5698234 --》 4328965 ---》9873410 -- 》 0873419, 在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后把加密后的结果在控制台打印出来

public class question{
    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();
        while(num != 0)
        {
            array[index] = num %10 ;
            index++;
            num =num /10 ;
        }
        for(int i=0 ;i< index ;i++)
        {
            array[i] = (array[i]+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]);
        }
    }
}
  1. 龟兔赛跑
    程序中使用随机数生成法来开发一个模拟龟兔赛跑的应用程序。
    比赛场地为70个方格,参赛者从“方格1”开始出发,每个方格代表比赛过程中所经过的一个位置。终点为“方格70”。最先到达或者通过“方格70”的参赛者将赢得一桶新鲜的胡萝卜和莴苣。在比赛过程中可能会经过一段很滑的山路,所有参赛者可能会滑倒。
    程序中有一只时钟,每秒滴答一次,程序应该根据下列规则来调整动物的位置:
    |移动类型|时间百分比|实际移动|
    乌龟
    |快速走* |50%****|向右03格|
    |滑倒 |20%****|向左06格|
    |慢速走 |30%****|向右01格|
    兔兔
    |睡觉
    |20%****|原地不动|
    |大跳 |20%****|向右09格|
    |大滑倒 |10%****|向左12格|
    |小跳** |30%****|向右01格|
    |小滑倒 |*20%****|向左02格|
    使用几个变量来跟踪动物的位置(即1-70号)。在位置1(即起跑线)上启动每个动物。如果动物在方格1前向左滑动,则将的动物移回方格1。
    通过产生一个随机数i来生成上表中的百分比,i的范围是1<=i<=10。对于乌龟而言,当1<=i<=5时“快速走”,当6<=i<=7时“打滑”,当8<=i<=10时“慢速走”。
    使用类似的方法来移动兔兔。比赛开始时打印以下字符串:
    begin。程序继续执行,时钟每滴答一次(即每循环一次),就打印70号方格位置的一条线,其中乌龟的位置用T表示,兔兔的位置用R表示。偶尔,竞赛者也会挤到同一个格子上。此时,乌龟会咬兔兔,程序要在这个位置上打印“OUCH!!!”。所有不是T、H或OUCH!!!(僵局情形)的地方都用 - 代替。
    打印出每行之后,确定每个动物是否到达或者穿过了70号方格。如果有,这打印出胜者并终止模拟程序。如果是乌龟胜利了,则打印“乌龟赢!”,如果是兔兔获胜了,则打印“兔子赢”。如果两个动物在同一时刻打成平手,那么应当表扬乌龟(因其处于劣势),或者打印“It's a lie”。如果没有动物获胜,就再执行一遍循环来模拟时钟的下个时刻。
package com.company;

import java.util.Random;

public class main {
    static String[] road = new String[70];
    static int tpos = 0 ;
    static int rpos = 0 ;

    public static  void computeT(int num)
    {

        if(num>= 1 && num<= 5)
        {
            tpos +=3 ;
        }
        else if(num >= 6 && num <= 7)
        {
            tpos -= 6 ;
            if(tpos < 0 )
            {
                tpos = 0 ;
            }
        }
        else
        {
            tpos += 1 ;
        }
    }
    public static  void computeR(int num)
    {
        if(num >= 1 && num<= 2)
        {
            rpos += 0 ;
        }
        else if(num >= 3 && num<= 4)
        {
            rpos += 9 ;
        }
        else if(num == 5)
        {
            rpos -= 12 ;
            if(rpos < 0 )
            {
                rpos = 0 ;
            }
        }
        else if(num >= 6 && num<= 8)
        {
            rpos += 1 ;
        }
        else
        {
            rpos -= 2 ;
            if(rpos < 0 )
            {
                rpos = 0 ;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {

        System.out.println ("begin");
        while(true)
        {
            for(int i =0 ;i< road.length ;i++)
            {
                road[i] ="-";
            }
            Random random =new Random();
            int num = random.nextInt ( 10 ) +1;

            computeR ( num );
            computeT ( num );

            if(tpos >= 70 || rpos >= 70)
            {
                break;
            }

            road[tpos] ="龟";
            road[rpos] ="兔";

            if(tpos == rpos)
            {
                road[tpos] = "ouch";
            }

            for(int i =0 ;i< road.length ;i++)
            {
                System.out.print (road[i]);
            }
            Thread.sleep ( 300 );
            System.out.println ();
        }

        if(tpos>= 70)
        {
            System.out.println ("乌龟赢");
        }
        else
        {
            System.out.println ("兔子赢");
        }
    }
}

相关文章

  • JavaSE之日期数值相关类

    Date类(java.util.date) SimpleDateFormat日期转换类 练习题 Math类

  • Thinking in Java 重顾

    这几天重新阅读一遍Thinking in Java 看见一道练习题(这本书的练习题之前都是忽略不看的) 想了一会儿...

  • 练习题 java

    Ip的组成有几种 二维字符矩阵找单词 二十六进制加法 包围的区域 输入:4X X X XX O O XX X O ...

  • java练习题

    1. Error与Exception的区别 Error与Exception类的父类都是throwable类,它们的...

  • java练习题

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

  • java 练习题

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

  • java练习题

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

  • Java练习题

    Java的问答题。 一、 基本 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以...

  • java练习题

    1、继承中的构造方法 输出:父类无参数的构造方法子类有参数的构造方法400 输出: ABeijingBShangh...

  • java练习题

    枚举类 练习题 1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对...

网友评论

      本文标题:java练习题

      本文链接:https://www.haomeiwen.com/subject/rkoqnxtx.html