Java程序设计题

本文深入探讨了泛型在Java中的实际应用,通过设计一个泛型最小值函数,展示了如何限制类型参数以提高代码的健壮性和灵活性。此外,还提供了一个自定义栈的实现案例,包括push、pop等核心方法,以及动态扩容机制。

实现最小值函数(泛型的实际应用)

自己设计一个泛型的获取数组最小值的函数.并且这个方法只能接受Number的子类并且实现了Comparable接口。

//注意:Number并没有实现Comparable
private static <T extends Number & Comparable<? super T>> T min(T[] values) {
    if (values == null || values.length == 0) return null;
    T min = values[0];
    for (int i = 1; i < values.length; i++) {
        if (min.compareTo(values[i]) > 0) min = values[i];
    }
    return min;
}

测试:

int minInteger = min(new Integer[]{1, 2, 3});//result:1
double minDouble = min(new Double[]{1.2, 2.2, -1d});//result:-1d
String typeError = min(new String[]{"1","3"});//报错

使用数组实现栈(数据结构)

自己实现一个栈,要求这个栈具有push()、pop()(返回栈顶元素并出栈)、peek() (返回栈顶元素不出栈)、isEmpty()、size()这些基本的方法。
提示:每次入栈之前先判断栈的容量是否够用,如果不够用就用Arrays.copyOf()进行扩容;

public class MyStack {
    private int[] storage;//存放栈中元素的数组
    private int capacity;//栈的容量
    private int count;//栈中元素数量
    private static final int GROW_FACTOR = 2;

    //TODO:不带初始容量的构造方法。默认容量为8
    public MyStack() {
        this.capacity = 8;
        this.storage=new int[8];
        this.count = 0;
    }

    //TODO:带初始容量的构造方法
    public MyStack(int initialCapacity) {
        if (initialCapacity < 1)
            throw new IllegalArgumentException("Capacity too small.");

        this.capacity = initialCapacity;
        this.storage = new int[initialCapacity];
        this.count = 0;
    }

    //TODO:入栈
    public void push(int value) {
        if (count == capacity) {
            ensureCapacity();
        }
        storage[count++] = value;
    }

    //TODO:确保容量大小
    private void ensureCapacity() {
        int newCapacity = capacity * GROW_FACTOR;
        storage = Arrays.copyOf(storage, newCapacity);
        capacity = newCapacity;
    }

    //TODO:返回栈顶元素并出栈
    private int pop() {
        count--;
        if (count == -1)
            throw new IllegalArgumentException("Stack is empty.");

        return storage[count];
    }

    //TODO:返回栈顶元素不出栈
    private int peek() {
        if (count == 0){
            throw new IllegalArgumentException("Stack is empty.");
        }else {
            return storage[count-1];
        }
    }

    //TODO:判断栈是否为空
    private boolean isEmpty() {
        return count == 0;
    }

    //TODO:返回栈中元素的个数
    private int size() {
        return count;
    }

}

验证

MyStack myStack = new MyStack(3);
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
myStack.push(5);
myStack.push(6);
myStack.push(7);
myStack.push(8);System.out.println(myStack.peek());//8System.out.println(myStack.size());//8for (int i = 0; i < 8; i++) {
    System.out.println(myStack.pop());
}System.out.println(myStack.isEmpty());//true
myStack.pop();//报错:java.lang.IllegalArgumentException: Stack is empty.
内容简介 《Java程序设计集》是同作者所编写的清华大学教材《Java程序设计》相配套的习集。习集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及数据库程序设计等。全书共分为习、参考答案和测试要点与解说明3个部分。习包括判断正误、填空、选择、简答、编程和趣味等6种型,并按难易程序分为3 个等级,采用星号注明。本习集收集了Java程序编写常见问,并以习形式总结和归纳Java程序设计知识要点,同时兼顾了SCJP(Sun公司 Java程序员认证考试),从而降低学习难度,减少编写程序出现错误的枘地,也便于掌握各个知识要点或测试对Java程序设计的掌握熟练程度。这些特点有利于初学者在学习过程中少走弯路。对知识点的总结以及内容的全面性也使得《Java程序设计集》具有一定的手册特性,非常适合复习,同时也方便教师出,使得各章节的试容易在试卷中分布均匀合理。在本习集中的编程和趣味还有可能采用其他计算机语言实现,从而本习集也有可能成为学习其他计算机语言的实践素材。 编辑推荐 内容全面:习全面覆盖了Java程序设计(J2SE)的基本知识要点和重要知识要点。以习的形式对JaVa程序设计方法和常见问进行了总结与归纳,从而方便复习。   实用性:《Java程序设计集》每章都含有一些趣味,营造了一种轻松而快乐的学习氛围,努力培养和提高学生的学习乐趣,同时也使学生容易产生学习成就感。   趣味性:习基本上覆盖了程序员在编写Java程序时经常出现的问Java程序设计知识要点,各习也列出其测试要点,从而方便教师从中挑选或改编考以及方便学生进行实战模拟练习或测试,同时也可以为SCJP考试作准备。   简洁性:每道习者晖力求典型而简洁,这样既方便初学者,也有利于提高学习效率,在较短的时间内测试并领会较多的知识要点。 作者简介 雍俊海1991年到2000年就读于清华大学计算机科学与技术系,获学士。硕士和博士学位,被评为清华大学优秀博士毕业生,博士论文被评为全国优秀博士论文。从2000年3月到2000年6月在香港科技大学计算机系担任访问研究员,从2000年11月到2002年9月在美国肯塔基大学计算机系做博士后,现为清华大学软件学院教师。参与或负责多个国家自然科学基金项目。国家863项目。973项目和美国自然科学基金项目。在2003-2004学年度在清华大学开设了"Java程序设计"课程,获得学生一致好评。根据清华大学2003-2004学年秋季学期教学评估结果,教学成绩在全校名列前茅,在清华大学软件学院所有参评教师中取得教学成绩第一名,在所有讲授Jaya课程的清华大学参评教师中获得教学成绩第一名。因此还获得了清华大学软件学院教学工作优秀奖、大学生研究训练计划(SRT)优秀指导教师一等奖。 目录 第一部分习 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第二部分 参考答案 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第三部分 测试要点与解说明 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 参考文献
1.下列特点中,哪个是Java 虚拟机执行的特点之一? A、字节代码 B、多进程 C、静态连接 D、编译 2.Java语言的类型是 A、面向对象语言 B、面向过程语言 C、汇编程序 D、形式语言 3.下列哪个数代表单精度浮点数? A、0652 B、3.4457D C、0.298f D、0L 4.以下哪个表达式是不合法的 A、String x="Hello"; int y=9; x+=y; B、String x="Hello"; int y=9; if(x==y){} C、String x="Hello"; int y=9; x=x+y; D、String x=null; int y=(x!=null)&&(x.length()>0)? x.length():0; 5.main()方法的返回类型是: A、 int B、void C、boolean D、 static 6.下列对继承的说法,哪个是正确的? A、子类能继承父类的所有方法和状态 B、子类能继承父类的非私有方法和状态 C、子类只能继承父类public方法和状态 D、子类只能继承父类的方法,而不继承状态 7.下列关于构造方法的说法正确的是( )。 A、因为构造方法名与类名必须相同,构造方法在创建对象时被执行。 B、构造方法是给对象赋初值,所以没有返回值,必须用void来声明。 C、构造方法不能被程序调用,也不可以重载。 D、一个类只允许有一个构造方法。 8.若需要定义一个类域或类方法,应使用哪种修饰符? A、static B、package C、private D、public 9.如要抛出异常,应用下列哪种子句? A、catch B、throw C、try D、finally 10.对于catch 子句的排列,下列哪种是正确的? A、父类在先,子类在后 B、子类在先,父类在后 C、有继承关系的异常不能在同一个 try 程序段内 D、先有子类,其他如何排列都无关 11.计算机中的流是? A、流动的字节 B、流动的对象 C、流动的文件 D、流动的数据缓冲区 12.以下哪个是java.io包中的一个兼有输入输出功能的类。 A、Object B、Serializable C、RandomAccessFile D、java.io中不存在这样的类 13.下面关于线程优先级的说法中,错误的是: A、Java中的线程的优先级有三个静态常量 B、新建线程的优先级默认为最低 C、优先级高的线程优先被执行 D、一个线程运行时,有可能被比它高优先级的线程抢占运行 14.下列方法中建议使用的是: A、stop() B、supend() C、resume() D、wait() 15.如果希望所有的控件在界面上均匀排序,就使用下列哪种布局管理器? A、BosLayout B、GridLayout C、BorderLayout D、FlowLayout 16.在一个MVC用户界面中,存在三个通讯对象,其中_________是指定的逻辑表示法。 A、模型 B、视图 C、控件 D、结构 17.applet类的直接父类是: A、Component类 B、Container类 C、Frame类 D、Panel类 18.下面关于沙箱模型的叙述中错误的是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值