JAVA练习题

1.已知数组存放⼀批QQ号码,QQ号码最⻓为11位,最短为5String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}

将该数组⾥⾯的所有 qq 号都存放在 LinkedList 中,将 list 中重复元素删除,将 list 中所有元素分别⽤迭代器和增强 for 循环打印出来
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;

public class Homework {
    public static void main(String[] args) {
        String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
       
        LinkedList<String> strss = new LinkedList<>();
        for(String x:strs){
            if(!strss.contains(x))
            strss.add(x);
        }

        for(Iterator iterator = strss.iterator();iterator.hasNext();){
            System.out.print(iterator.next()+"\t");
        }

        System.out.println();

        for(String x:strss){
            System.out.print(x+"\t");
        }


    }
}

2.键盘录⼊⼀个字符串,去掉其中重复字符,打印出不同的那些字符,必须保证顺序。例如输⼊:aaaabbbcccddd,打印结果为:abcd

import java.util.ArrayList;
import java.util.Scanner;

public class Homework2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = new String();
        str = scanner.next();
        char [] newStr = str.toCharArray();
        ArrayList<Character> strs = new ArrayList<>();
        for(char x:newStr){
            if(!strs.contains(x)){
                strs.add(x);
            }
        }
        for(Character s:strs){
            System.out.print(s);
        }
    }
}

3. 双⾊球规则:双⾊球每注投注号码由 6 个红⾊球号码和 1 个蓝⾊球号码组成。红⾊球号码从 1—33 中选择;蓝⾊球号码从 1—16 中选择;请随机⽣成⼀注双⾊球
号码。(要求同⾊号码不重复)
import java.util.*;

public class Homework3 {
    public static void main(String[] args) {
        List<Integer> red = new ArrayList<>();
        List<Integer> blue = new ArrayList<>();
        for(int i=1;i<=33;i++){
            red.add(i);
        }
        for(int i=1;i<=16;i++){
            blue.add(i);
        }
        Collections.shuffle(red);
        Collections.shuffle(blue);
        for(int i =0;i<6;i++){
            System.out.println(i+1+":"+"R"+red.get(i)+" B"+blue.get(i));
        }


    }
}

4. 分别⽤ Comparable Comparator 两个接⼝对下列四位同学的成绩做降序排序,如果成绩⼀样,那在成绩排序的基础上按照年龄由⼩到⼤排序。
package tosit;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class Homework4 {
    public static void main(String[] args) {
        Set<Student1> s = new TreeSet<>(new MyComparator());
        Student1 s1 = new Student1("liusan",20,90.0F);
        Student1 s2 = new Student1("lisi",22,90.0F);
        Student1 s3 = new Student1("wangwu",20,99.0F);
        Student1 s4 = new Student1("sunliu",22,100.0F);
        s.add(s1);
        s.add(s2);
        s.add(s3);
        s.add(s4);
        for(Student1 x:s){
            System.out.println(x.getName()+" "+x.getAge()+" "+x.getScore());
        }
    }
}

class MyComparator implements Comparator{

    @Override
    public int compare(Object o1, Object o2) {
        if(o1 instanceof Student1 & o2 instanceof Student1){
            Student1 s1 = (Student1) o1;
            Student1 s2 = (Student1) o2;
            if(s1.getScore()>s2.getScore()){
                return -1;
            } else if (s1.getScore()<s2.getScore()) {
                return 1;
            } else if (s1.getScore()==s2.getScore()) {
                if(s1.getAge()<=s2.getAge()){
                    return -1;
                } else if (s1.getAge()>s2.getAge()) {
                    return 1;
                }
            }
        }
        return 0;
    }
}

class Student1{
    String name;
    float score;
    int age;
    Student1(String name,int age,float score){
        this.age = age;
        this.name = name;
        this.score = score;
    }
    int getAge(){
        return age;
    }
    String getName(){
        return name;
    }

    float getScore(){
        return score;
    }
}

5.

两个对象 Person p1 = new Person(); p2= new Person();
问题 1: 如果两个对象的哈希值相同 p1.hashCode() = p2.hashCode() p1.equals(p2) ⼀定是 true 吗?
问题 2: 如果两个对象的 equals ⽅法返回 true, p1.equals(p2)==true ,两个对象的哈希值⼀定相同吗 ? 请说明理由。

 

回答1:不一定

回答2:不一定

6.自己实现ArrayList

package tosit;

public class ListCopy {
    private int length;
    private Object[] obj;
    private int index = 0;
    public ListCopy(int length){
        this.length = length;
        obj = new Object[length];
    }

    public void add(Object o){
        //如何判断数组是否达到上限
        if(index == length){
            //上限后扩容
            Object[] newobj = new Object[length+length/2];
            System.arraycopy(obj,0,newobj,0,length);
            newobj[length] = o;
            obj = newobj;
            index++;
            length = length + length / 2;
        }else {
            obj[index] = o;
            index++;
        }
    }

    public void show(){
        for(Object o : obj){
            System.out.println(o);
        }
    }

    public int size(){
        return index;
    }

    public Object get(int i){
        return obj[i];
    }

    public boolean contain(Object hello){
        for(Object o:obj){
            if(o!=null){
                if(o.equals(hello)){
                    return true;
                }
            }
        }
        return false;
    }

    public boolean remove(int i){
        if(i>index){
            return false;
        }else{
            Object[] newobj=new Object[length];
            System.arraycopy(obj,0,newobj,0,i);
            System.arraycopy(obj,i+1,newobj,i,length-i-1);
            obj=newobj;
            index--;
            return true;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值