实操三

知识点范围:数组

一、选择题

  1. 在Java中,以下程序段能正确为数组赋值的是( AD )。(选择2项)
    • A:int a[] = {1, 2, 3, 4};
    • B:int b[4] = {1, 2, 3, 4};
    • C:int c[]; c = {1, 2, 3, 4};
    • D:int d[] = new int[] {1, 2, 3, 4};

解析:

  • A选项:符合定义格式,正确
  • B选项:在定义数组时,赋值运算符左边的[]内,不允许有任何内容,错误
  • C选项:c = {1, 2, 3, 4};JVM认为缺失关键字new,应改为int[] c; c = new int[] {1, 2, 3, 4};
  • D选项:符合定义格式,正确
  1. 数组元素的索引可以是( D )。(选择1项)
    • A:整型常量
    • B:整型变量
    • C:整型表达式
    • D:以上都可以

解析:

  • A选项:整型常量可以表示,例如is[0]
  • B选项:整型变量可以表示,例如int i = 0; is[i];
  • C选项:整型表达式可以表示,例如is[is.length - 1];
  • D选项:正确
  1. 已知表达式int[] m = {0, 1, 2, 3, 4, 5, 6};下面( B )表达式的值与数组最大下标数相等。(选择1项)
    • A:m.length();
    • B:m.length - 1
    • C:m.length() + 1
    • D:m.length + 1

解析:
数组没有length()方法,只有length属性,且数组的下标从0开始。

  1. 在Java中,以下定义数组的语句正确的是( CD )。(选择2项)
    • A:int t[10] = new int[];
    • B:char[] a = ”hello”;
    • C:String[] s = new String[10];
    • D:double[] d[] = new double [4][];

解析:

  • A选项:在数组中,赋值运算符左边的[]内不允许有任何内容,错误
  • B选项:虽然定义了一个char类型数组,但是没有正确接收数组元素,应改为char[] a = {'h', 'e', 'l', 'l', 'o'};
  • C选项:符合定义的格式,正确
  • D选项:在二维数组中,赋值运算符右边的第一个[]内必须有内容,第二个[]内可以允许为空,正确
  1. 分析下面的Java源程序,编译后的运行结果是( B )。(选择1项)
public class Test {
    public static void main(String[] args) {
        int[] numbers = new int[] {1, 2, 3};
        System.out.println(Arrays.binarySearch(numbers, 2));
    }
}
    • A:输出0
    • B:输出1
    • C:输出2
    • D:输出3

解析:
java.util.Arrays.binarySearch(int[] a, int key):用二分查找的方式查询并返回key在a数组中的位置。

  1. 以下选项中关于Java中方法的可变参数的说法正确的是( AC )。(选择2项)
    • A:可变参数是JDK1.5中增加的内容,用来表示方法的形参
    • B:一个方法可以没有可变参数,也可以有1个或者多个可变参数
    • C:可变参数可以被当作数组参数来处理
    • D:可变参数对应的实参的个数可以是1个、2个、多个,但不能是0个,还可以是一个数组

解析:
可变参数最多只能存在一个,且必须放在最右边,可以代表0~N个参数,与数组视为同一类型。

  1. 以下选项中能够正确创建一个数组的是( AD )。(选择2项)
    • A:float[] f[] = new float[6][6];
    • B:float f[][] = new float[][];
    • C:float[6][] f = new float[6][6];
    • D:float[][] f = new float[6][];

解析:
在二维数组中,赋值运算符右边的第一个[]内必须有内容,第二个[]内可以允许为空。

  1. 下面的数组定义哪些是正确的?( CD )。(选择2项)
    • A:int a[][] = new int[3, 3];
    • B:int a[3][3] = new int[][];
    • C:int a[][] = new int[3][3];
    • D:int[] a[] = new int[3][3];

解析:
在二维数组中,赋值运算符右边的第一个[]内必须有内容,第二个[]内可以允许为空。

  1. 关于数组作为方法的参数时,向方法传递的是( A )。(选择1项)
    • A:数组的引用
    • B:数组的长度
    • C:数组自身
    • D:数组的元素

解析:
Java中只有值传递,对于基本数据类型来说传递的是数据的值的副本,对于引用数据类型来说传递的是数据的引用地址的副本。

  1. 若一个数组声明为int[][] is = new int[5][6];,则is[2][3]前有多少个元素( A )。(选择1项)
    • A:15
    • B:14
    • C:13
    • D:12

解析:
int[][] is = new int[5][6];表示一个长度为5的二维数组且内部数组长度为6。

二、简答题

  1. 简述数组的特点。
    1. 数组是有先后顺序的
    2. 数组内元素是可以重复的
    3. 数组内元素的内存是连续的
    4. 数组的长度是确定的,一旦被创建,大小就不可以改变
    5. 数组内元素必须是相同类型
    6. 数组内元素可以是任何数据类型,包括基本数据类型和引用类型
  2. 简述数组的优缺点。
    • 优点:
      1. 按索引查询元素快
      2. 能存储大量数据
      3. 按索引遍历数组方便
    • 缺点:
      1. 按内容查找元素慢
      2. 数组的大小一经确定不能改变
      3. 每个数组都只能存储同一种类型的数据
      4. 增删元素慢
  3. 数组有哪些初始化方式?
    1. 静态创建,如:int[] is = {1, 2, 3};,声明和初始化必须在同一行
    2. 动态创建,如:int[] is = new int[3];int[] is = new int[] {1, 2, 3};,声明和初始化可以不在同一行
  4. 数组下标的类型是什么?最小的下标是什么?一维数组的第三个元素如何表示?
    数组下标的类型是长整型,最小的下标是0,一维数组的第三个元素表示为is[2]。

三、编码题

  1. 数组查找操作:定义一个长度为10的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”,不包含就打印出“No”。
  • 代码:
package leif.tests;

import java.util.Scanner;

public class Test {
    private static final String[] STRINGS = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean isFound = false;
        String string = scanner.nextLine();

        for (String str : STRINGS) {
            if (str.equals(string)) {
                isFound = true;
                break;
            }
        }

        if (isFound) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }

        scanner.close();
    }
}
  • 结果截图:


    image.png
  1. 输入某年某月某日,判断这一天是这一年的第几天。
  • 代码:
package leif;

import java.util.Calendar;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Calendar calendar = Calendar.getInstance();
        System.out.print("请输入年份:");
        int year = scanner.nextInt();
        System.out.print("请输入月份:");
        int month = scanner.nextInt();
        System.out.print("请输入日期:");
        int date = scanner.nextInt();
        calendar.set(year, month - 1, date);
        System.out.println(calendar.getTime());
        System.out.println("这一天是这一年的第" + calendar.get(Calendar.DAY_OF_YEAR) + "天");
        scanner.close();
    }
}
  • 结果截图:


    image.png

四、程序题

  • 项目结构+README:


    image.png
  • 代码:
package test;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Person person = new Person();

        lable: while (true) {
            System.out.println("*****欢迎进入双色球彩票系统*****");
            System.out.println("\t1.购买彩票");
            System.out.println("\t2.查看开奖");
            System.out.println("\t3.退出");
            System.out.println("********************************");
            System.out.print("请选择菜单:");
            int flag = scanner.nextInt();

            switch (flag) {
                case 1:
                    System.out.println("【双色球彩票系统 > 购买彩票】");
                    System.out.println("您需要下多少注?");
                    person.setBet(scanner.nextInt());

                    for (int i = 1; i <= 6; i++) {
                        System.out.println("请输入6个红色球号<数字为1~33>,第【" + i + "】个红色球号为:");
                        int red = scanner.nextInt();

                        if (red < 1 || red > 33) {
                            System.out.println("红色球号范围是1~33!");
                            i--;
                            continue;
                        }

                        if (person.getRedSet().contains(red)) {
                            System.out.println("红色球号不能重复!");
                            i--;
                            continue;
                        }

                        person.addToRedSet(red);
                    }

                    while (true) {
                        System.out.println("请输入1个蓝色球号<数字为1~16>:");
                        int blue = scanner.nextInt();

                        if (blue < 1 || blue > 16) {
                            System.out.println("蓝色球号范围是1~16!");
                            continue;
                        }

                        person.setBlue(blue);
                        break;
                    }

                    System.out.println(person.toString());
                    person.setBuy(true);
                    break;
                case 2:
                    if (person.isBuy()) {
                        DoubleChromosphere doubleChromosphere = new DoubleChromosphere();
                        System.out.println(doubleChromosphere.toString());
                        int redCounter = 0;

                        for (int red : doubleChromosphere.getRedSet()) {
                            if (person.getRedSet().contains(red)) {
                                redCounter++;
                            }
                        }

                        boolean blueBall = false;

                        if (person.getBlue() == doubleChromosphere.getBlue()) {
                            blueBall = true;
                        }

                        if (redCounter == 6 && blueBall) {
                            System.out.println("【一等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.FIRST_PRIZE * person.getBet()) + "】元!");
                        } else if (redCounter == 6 && !blueBall) {
                            System.out.println("【二等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.SECOND_PRIZE * person.getBet()) + "】元!");
                        } else if (redCounter == 5 && blueBall) {
                            System.out.println("【三等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.THIRD_PRIZE * person.getBet()) + "】元!");
                        } else if ((redCounter == 5 && !blueBall) || (redCounter == 4 && blueBall)) {
                            System.out.println("【四等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.FOURTH_PRIZE * person.getBet()) + "】元!");
                        } else if ((redCounter == 4 && !blueBall) || (redCounter == 3 && blueBall)) {
                            System.out.println("【五等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.FIFTH_PRIZE * person.getBet()) + "】元!");
                        } else if (redCounter < 3 && blueBall) {
                            System.out.println("【六等奖】恭喜你!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.SIXTH_PRIZE * person.getBet()) + "】元!");
                        } else {
                            System.out.println("【再接再厉】Sorry!共下了【" + person.getBet() + "】注,投资【" + (Constant.UNIT_PRICE * person.getBet()) + "】元,获奖【" + (Constant.NULL * person.getBet()) + "】元!");
                        }
                    } else {
                        System.out.println("请先购买彩票!");
                    }

                    break;
                case 3:
                    System.out.println("谢谢使用");
                    break lable;
                default:
                    System.out.println("输入错误");
                    continue lable;
            }
        }

        scanner.close();
    }
}

class Person {
    private boolean isBuy;
    private Set<Integer> redSet;
    private int blue;
    private int bet;

    public Person() {
        redSet = new HashSet<Integer>();
    }

    public boolean isBuy() {
        return isBuy;
    }

    public void setBuy(boolean isBuy) {
        this.isBuy = isBuy;
    }

    public Set<Integer> getRedSet() {
        return redSet;
    }

    public void addToRedSet(int red) {
        redSet.add(red);
    }

    public int getBlue() {
        return blue;
    }

    public void setBlue(int blue) {
        this.blue = blue;
    }

    public int getBet() {
        return bet;
    }

    public void setBet(int bet) {
        this.bet = bet;
    }

    @Override
    public String toString() {
        return "您一共买了【" + bet + "】注,共需支付【" + Constant.UNIT_PRICE * bet + "】元,所选号为:" + redSet.toString() + " " + blue;
    }
}

class DoubleChromosphere {
    private Set<Integer> redSet;
    private int blue;

    public DoubleChromosphere() {
        redSet = new HashSet<Integer>();

        for (int i = 1; i <= 6; i++) {
            int red = (int)(Math.random() * 33 + 1);

            if (redSet.contains(red)) {
                i--;
                continue;
            }

            redSet.add(red);
        }

        blue = (int)(Math.random() * 16 + 1);
    }

    public Set<Integer> getRedSet() {
        return redSet;
    }

    public int getBlue() {
        return blue;
    }

    @Override
    public String toString() {
        return "本期双色球为:" + redSet.toString() + " " + blue;
    }
}

class Constant {
    public static final int UNIT_PRICE = 2;
    public static final int FIRST_PRIZE = 500;
    public static final int SECOND_PRIZE = 400;
    public static final int THIRD_PRIZE = 300;
    public static final int FOURTH_PRIZE = 200;
    public static final int FIFTH_PRIZE = 100;
    public static final int SIXTH_PRIZE = 5;
    public static final int NULL = 5;
}
  • 结果截图:


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容