1.一个QUEUE类,有size,pop(),push()等方法,判断其中元素为null时,提醒客户已经没有元素了.
---------------------------------------------------------------
2.一副扑克牌,用程序洗牌,不能和原来的位置一样,从一到十三.没有大小王.
---------------------------------------------------------------
3.N个人围成一个圈,数到5后站出来,
---------------------------------------------------------------
4.newInstance()与new()的区别
---------------------------------------------------------------
5.java的测试单元 ,用jUnit来测试 CVS?
---------------------------------------------------------------
6.一个数组有两个数相同,把他们的索引下标找出来.

解决方案 »

  1.   

     从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载; 2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
      

  2.   

    第一题不知道是谁出的,不应该用pop,push这样的用于堆栈的词来作为队列的行为用词.
      

  3.   

    1. size为0,就是空队列了
    2. 随机数
    3. 约瑟夫问题
    4. 一般情况下 有newInstance()生成实例,因为没有public的构造方法 比如单例模式
    5. ???
    6. 用集合类处理 或者排序后再处理
      

  4.   

    /*用一个数组实现循环队列。
    (java不能创建泛型数组。)
    */import java.util.*;public class SqQueue<T>{
    private int front;
    private int rear;
    private T[] base;
    private int size;

    //构造方法
    //
    public SqQueue(int size){
    this.size=size+1;
    //base =new T[size];//error
    base=(T[])new Object[size+1];
    front=rear=0;
    }

    //构造方法
    //
    public  SqQueue(){
    size=11;
    //base=new T[10];//error.
    base=(T[])new Object[11];
    front=rear=0;
    }

    //返回队列最大的容量
    //
    public int size(){
    return base.length-1;
    }

    //入队方法
    //
    public void enqueue(T elem) throws RuntimeException {
    if((rear+1)%size==front){
    throw new RuntimeException("Queue is full!");
    }
    base[rear]=elem;
    rear=(rear+1)%size;
    }

    //出队方法
    //
    public T dequeue() throws RuntimeException{
    if(front==rear){
    throw new RuntimeException("Queue is empty!");
    }
    T e=base[front];
    front=(front+1)%size;
    return e;
    }

    //队空?
    //
    public boolean isEmpty(){
    return front==rear;
    }

    //队满?
    //
    public boolean isFull(){
    return (rear+1)%size==front;
    }

    //当前队的长度
    //
    public int length(){
    return (rear-front+size)%size;
    }

    //测试
    //
    public static void main(String[] args){
    SqQueue<Integer> sq=new SqQueue<Integer>(5);
    System.out.println(sq.size());
    sq.enqueue(7);
    sq.enqueue(10);
    sq.enqueue(6);
    System.out.println("出队:"+sq.dequeue());
    System.out.println("队的长度:"+sq.length());
    sq.enqueue(8);
    sq.enqueue(9);
    sq.enqueue(4);
    System.out.println(sq.isFull());
    //sq.enqueue(5); //RuntimeException.
    while(!sq.isEmpty()){
    System.out.println("出队:"+sq.dequeue());
    }
    //sq.dequeue();//RuntimeException.
    }
    }
      

  5.   

    纸牌类,表示一张纸牌:
    public class Card {

    public CardSuit suit; //花色
    public int value; //点数,1代表A,11代表J

    public Card(CardSuit suit, int value) {
    this.suit = suit;
    this.value = value;
    }

    @Override
    public String toString() {
    StringBuilder sb = new StringBuilder();
    switch(suit) {
    case SPADE:
    sb.append("黑桃");
    break;
    case HEART:
    sb.append("红桃");
    break;
    case DIAMOND:
    sb.append("方片");
    break;
    case CLUB:
    sb.append("梅花");
    break;
    }

    switch(value) {
    case 1:
    sb.append('A');
    break;
    case 11:
    sb.append('J');
    break;
    case 12:
    sb.append('Q');
    break;
    case 13:
    sb.append('K');
    break;
    default:
    sb.append(value);
    }
    return sb.toString();
    }
    }扑克类,表示一副扑克:
    import java.util.Random;//纸牌的花色,分别是:黑桃,红心,方片,梅花
    enum CardSuit {SPADE, HEART, DIAMOND, CLUB};//52张牌,没有大小王
    public class Cards {

    public Cards() {
    cards = new Card[52];
    int index = 0;
    for(CardSuit suit:CardSuit.values()) {
    for(int i=1; i<=13; i++)
    cards[index++] = new Card(suit, i);
    }
    } public void showCards() {
    for(Card c:cards) {
    System.out.print(c);
    System.out.print("  ");
    }
    System.out.println();
    }

    //洗牌
    public void shuffle() {
    Card[] target = new Card[52];
    int i = 0, j = 26, index = 0, n;
    Random rand = new Random();
    //交错式洗牌
    while(index<52) {
    n = rand.nextInt(3) + 1;
    while(n>0&&i<26) {
    target[index++] = cards[i++];
    n--;
    }
    n = rand.nextInt(3) + 1;
    while(n>0&&j<52) {
    target[index++] = cards[j++];
    n--;
    }
    }

    //切牌,把下半部分和上半部分互换位置
    n = rand.nextInt(10)+20;
    for(i=0; i<52; i++) {
    cards[i] = target[(n+i)%52];
    }
    }

    private Card[] cards;
    }主函数,用于测试:
    public class Main { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Cards cards = new Cards();
    cards.showCards();
    cards.shuffle();
    cards.shuffle();
    cards.shuffle();
    cards.shuffle();
    cards.shuffle();
    cards.showCards();
    }}
      

  6.   

    public class TestFindNum { public static void main(String[] args) {

    int[] ary = new int[]{0,5,6,9,1,0,2,4,21,11,7};

    //初始化索引值为-1;
    int index = -1;
    int index2 = -1;

    //嵌套循环搞定,
    for(int i=0; i<ary.length; i++) {
    for(int j=ary.length-1; j>i; j--) {
    if(ary[i] == ary[j]) {
    index = i;
    index2 = j;
    break;
    }
    }
    }

    if(index == -1 || index2 == -1) {
    System.out.println("没有找到");
    }else {
    System.out.println("下标为:" + (index+1) + "的,和下标为:" + (index2+1) + "的值相同");
    }
    }
    }
                    //运行结果
    //第1个位置和第5个位置的值相同
      

  7.   

    这里有个小小的问题就是,当找到了索引值以后,你的break只能退出当前的循环层。因此第一层的循环还会继续。
      

  8.   

    用 JUnit 来测试 CVS ????
      

  9.   

    CVS 已经是一个非常成熟的版本控制系统了,而且也不是 Java 开发的,用得着使用 JUnit 来测试?
      

  10.   


    还是说清楚吧,你想的没有错,如果条件满足的确进入了if(){}代码块,
    break;只能跳出内层循环,对于此题目要求而言,应该能够满足要求;
    但效率方面有待提高;有一办法可以解决,把for循环封装成一方法。该方法有一参数:数组引用
    返回类型 int
    用return 0 代替 break;解决问题了吧;