村雨遥

V1

2022/07/23阅读:13主题:绿意

Java 入门练习(36 - 40)

JAVA36 判断学生成绩

描述

定义一个方法用于录入学生的考试成绩,要求考试成绩必须在0-100之间,不满足就产生一个自定义异常,控制台输出一个错误信息"分数不合法"(请输出自定义异常对象的错误信息,将错误信息设置为分数不合法)

输入描述

控制台输入的int类型整数

输出描述

若分数合法则输出该分数,否则输出错误信息分数不合法

示例1

输入:

100

输出:

100

示例2

输入:

-1

输出:

分数不合法

解答

定义一个异常类,然后重写异常类输入异常信息处理的方法,注意此时到了构造方法。然后就是利用 if...else 条件分支对输入进行判断,根据符合的条件进入不同的执行分支。如果输入的分数不满足 [0,100] 的情况,那么就直接抛出异常。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt();

        try {
            if (score >= 0 && score <= 100)
                System.out.println(score);
            else {
                throw new ScoreException("分数不合法");
            }
        } catch (ScoreException str) {
            System.out.println(str.getMessage()); 
        }

    }
}

class ScoreException extends Exception {

    public ScoreException(String message) {
        super(message);
    }
}

JAVA37 字符串去重

描述

从键盘获取一串字符串,要求去除重复的字符。请使用 HashSet 解决这一问题

输入描述

键盘输入的任意字符串

输出描述

去重后的字符串(不要求顺序,预设代码中已经给出输出)

示例1

输入:

helloworld

输出:

rdewhlo

解答

既然题目中已经提示了利用 HashSet,那么直接使用就好了,但是要注意的是,往 HashSet 里边添加元素得到的结果是无序的,如果要想得到有序的结果,那么则不能使用 HashSet

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        scanner.close();
        HashSet<Character> hs = new HashSet<>();


        for (int i = 0; i < str.length(); i++) {
            hs.add(str.charAt(i));
        }


        for (char c : hs) {
            System.out.print(c);
        }
    }
}

JAVA38 集合遍历

描述

请使用三种方式遍历一个 list 集合

输入描述

键盘任意输入的五个int类型变量

输出描述

使用三种不同的方法遍历集合,遍历输出时不换行,数字之间用空格隔开

示例1

输入:

1 2 3 4 5

输出:

普通for循环:1 2 3 4 5 
增强for循环:1 2 3 4 5 
迭代器遍历:1 2 3 4 5 

解答

主要考察基础语法,要牢记的两种 for 循环,一种是普通循环,另一种则是增强循环,而迭代器能掌握就更好了。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        int num3 = scanner.nextInt();
        int num4 = scanner.nextInt();
        int num5 = scanner.nextInt();
        scanner.close();
        list.add(num1);
        list.add(num2);
        list.add(num3);
        list.add(num4);
        list.add(num5);
        System.out.print("普通for循环:");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }

        System.out.println();
        System.out.print("增强for循环:");
        for (int num : list) {
            System.out.print(num + " ");
        }

        System.out.println();
        System.out.print("迭代器遍历:");
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }

        System.out.println();
    }
}

JAVA39 排队系统

描述

请设计一个排队程序,用户有普通客人和VIP客人之分,VIP客人不排队(即VIP客人在队列头部),目前队列中已有两位客人小明和小军在排队,请将VIP客人小红新增至队列头部。

输入描述

输出描述

预设代码中已经指定输出

解答

对于 VIP 客人,和普通客人最大的区别就在于 VIP 客人不用排队,所以无论何时 VIP 来都可以排到队列的最前边,利用 addFirst() 方法即可实现插队到第一位。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Guest guest1 = new Guest("小明"false);
        Guest guest2 = new Guest("小军"false);
        Guest vipGuest = new Guest("小红"true);
        Deque<Guest> deque = new ArrayDeque<>();
        deque.add(guest1);
        deque.add(guest2);

        deque.addFirst(vipGuest);

        System.out.println(deque);
    }
}
class Guest {
    String name;
    Boolean vip;

    @Override
    public String toString() {
        return name;
    }

    public Guest(String name, Boolean vip) {
        this.name = name;
        this.vip = vip;

    }
}

JAVA40 首尾交替出队

描述

现从一队学生中抽人上台演讲,为公平起见,队头队尾交替抽取,请通过程序实现这个出队的过程。

输入描述

一组学生的名字

输出描述

交替打印队头队尾学生的名字

示例1

输入:

Tom Jim Lily Lucy Mary

输出:

Tom
Mary
Jim
Lucy
Lily

解答

分为两种情况,如果队列长队不小于 2,那么则不断从队列中依次头、尾打印学生名字。另外一种情况就是此时队伍中只有一个学生了,这个时候只需要打印其名字即可。

import java.util.ArrayDeque;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        ArrayDeque deque = new ArrayDeque();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            // 初始化队列中的数据
            deque.offerLast(name);
        }

        while (deque.size() >= 2) {
            System.out.println(deque.pollFirst());
            System.out.println(deque.pollLast());
        }
        if (deque.size() > 0) {
            System.out.println(deque.pollFirst());
        }
    }
}

分类:

后端

标签:

Java

作者介绍

村雨遥
V1

公众号:村雨遥