【Java刷题进阶】基础入门篇⑧

简介: 【Java刷题进阶】基础入门篇⑧

第一题:判断学生成绩


题目描述


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

输入描述:

控制台输入的int类型整数

输出描述:

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

示例


输入: 100

输出: 100

输入:-1

输出: 分数不合法

题解


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); //输入异常信息
    }
}


第二题:字符串去重


题目描述


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

输入描述:

键盘输入的任意字符串

输出描述:

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

示例


输入: helloworld

输出: rdewhlo

题解


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<>();
        //write your code here......
//          新建HashSet,然后遍历字符串,将所有字符添加到Set。
//          由于HashSet本身结构不允许有重复的项,所以会自动去除重复的元素
        for(int i=0;i<str.length();i++){
            hs.add(str.charAt(i));
            //str.charAt (i)的意思是第i个字符在字符串str中所占的位置
            //不能直接使用str[i]这种方法来取字符串的值,这种取法只适合数组根据索引下标取值
        }
//         //第二种写法
//         //因为增强for循环只能够对数组进行循环,故我们应该先对str字符串进行toCharArray()将其数组化,进而取得其值
//         for(char c:str.toCharArray(){
//             hs.add(c);
//         }
        for (char c:hs) {
            System.out.print(c);
        }
    }
}


第三题:集合遍历


题目描述


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

输入描述:

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

输出描述:

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

示例


输入: 1 2 3 4 5

输出:

普通for循环:1 2 3 4 5

增强for循环:1 2 3 4 5

迭代器遍历:1 2 3 4 5

题解


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循环:");
        //write your code here......
        for(int i=0;i<list.size();i++){
            //泛型容器类的获取其长度用size
            //数组,字符串获取其长度用length
            //泛型容器类获取其值可以用get方法,数组则是用[]加下标的方法
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
        System.out.print("增强for循环:");
        //write your code here......
        for(int i:list){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.print("迭代器遍历:");
        //write your code here......
//         int count = 0;
//         int i =0;
//         while(count<5){
//             System.out.print(list.get(i)+" ");
//             i++;
//             count++;
//         } 因题目要求使用迭代器循环,故舍弃该写法!
        //Iterator迭代器
        /**
            hasNext()方法:
            用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
            Next()方法:
            用来返回迭代的下一个元素,并把指针向后移动一位。
        */
        //write new code
        Iterator it = list.iterator();
        while(it.hasNext()){
            System.out.print(it.next()+" ");
        }
        System.out.println();
    }
}


第四题:排队系统


题目描述


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

输入描述:

输出描述:

预设代码中已经指定输出

题解


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;
    }
}


第五题:首尾交替出队


题目描述


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

输入描述:

一组学生的名字

输出描述:

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

示例


输入: Tom Jim Lily Lucy Mary

输出: Tom Mary Jim Lucy Lily

题解


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);
        }
        // write your code here......
        int l = deque.size();
        for (int i=0; i<l; i++) {
            if (i%2==0) {
                System.out.println(deque.pollFirst());
            }
            else {
                System.out.println(deque.pollLast());
            }
        }
    }
}


目录
相关文章
|
15天前
|
JSON NoSQL Java
Redis入门到通关之Java客户端SpringDataRedis(RedisTemplate)
Redis入门到通关之Java客户端SpringDataRedis(RedisTemplate)
33 0
|
16天前
|
Java
Java编程语言入门指南
Java编程语言入门指南
16 1
|
22小时前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
6 0
|
23小时前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
6 0
|
2天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
10 0
|
2天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
26 1
|
3天前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
16 0
|
11天前
|
设计模式 算法 安全
Java多线程编程实战:从入门到精通
【4月更文挑战第30天】本文介绍了Java多线程编程的基础,包括线程概念、创建线程(继承`Thread`或实现`Runnable`)、线程生命周期。还讨论了线程同步与锁(同步代码块、`ReentrantLock`)、线程间通信(等待/通知、并发集合)以及实战技巧,如使用线程池、线程安全设计模式和避免死锁。性能优化方面,建议减少锁粒度和使用非阻塞算法。理解这些概念和技术对于编写高效、可靠的多线程程序至关重要。
|
11天前
|
算法 Java 大数据
Java从入门到精通学习报告
Java从入门到精通学习报告
19 1
|
12天前
|
Java 索引
JAVA刷题之数组的总结和思路分享
JAVA刷题之数组的总结和思路分享