记录点赞用户、回文数判断 题目

JAVA47 记录点赞用户

描述

为了实现社区点赞功能,要求设计一个点赞记录器,该工具包含如下两个方法:

  1. like方法:该方法需要传入用户名作为参数,如果用户没点赞过,则记录本次点赞行为,若用户已经点赞过,则删除他的点赞行为。

  2. getLikeUsers方法:该方法需要返回所有点赞用户的名字,不要求顺序。

(为保证答案正确,请使用HashSet完成本题)

输入描述:

用户名

输出描述:

所有点赞且未取消点赞的用户名,不要求顺序。(输出为Arrays.toString形式)

示例:

输入:Tom Jim Lucy Lily Tom Lucy Tom
输出:[Tom, Lily, Jim]

 

分析:

​ 1.编写HashSet集合的对象。

​ 2.HashSet的对象中不存在该username,则添加该username。

​ 3.HashSet的对象中存在该username,去掉该username。

​ 4.把HashSet集合转换位字符串数组。

​ 5.再使用Arrays.toString转为字符串,输出该字符串。

 

代码:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......

    //创建HashSet集合的对象:
    HashSet<String> set =new HashSet<>();


    @Override
    public void like(String username) {
        if(!set.contains(username)){
            //HashSet的对象中不存在该username,则添加该username
            set.add(username);
        }else {
            //HashSet的对象中存在该username,去掉该username
            set.remove(username);
        }
    }

    @Override
    public String[] getLikeUsers() {
        String[] ss = new String[set.size()];

        return (set.toArray(ss));
    }



}

 

大佬代码:

import java.util.*;
 
public class Main {
 
    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();
 
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }
 
        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }
 
}
 
/**
 * 点赞记录器
 */
 
interface LikeRecorder {
 
    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);
 
    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();
 
}
 
class LikeRecorderImpl implements LikeRecorder {
    private HashSet<String> names = new HashSet();
 
@Override
public void like(String name) {
    if (names.contains(name)) {
        names.remove(name);
    } else {
        names.add(name);
    }
}
 
@Override
public String[] getLikeUsers() {
    return names.toArray(new String[0]);
}
 
    // write your code here......
 
}

 
 

JAVA48 回文数判断

描述

请补全预设代码中判断回文数的方法,若输入的五位数字是回文是则返回true,否则返回false。回文数即个位与万位相同,十位与千位相同的数字。如:12321、89898

输入描述:

控制台输入的五位数

输出描述:

true/false

示例:

输入:12321
输出:true
输入:18182
输出:false

 
 

分析:

​ 1.考察数字的位数的求法。

 

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        Main main = new Main();
        int number = console.nextInt();
        System.out.println(main.palindromeNumber(number));
    }

    public Boolean palindromeNumber(int number) {

        //write your code here......
        //个位
        int num1=number%10;
        //十位
        int num2=number/10%10;
        //百位
        int num3=number/100%10;
        //千位
        int num4=number/1000%10;
        //万位
        int num5=number/10000%10;
        
        if(num1==num5 && num2==num4){
            return true;
        }else {
            return false;
        }

    }
}

 

大佬代码:

使用reverse()函数

    //将number转化为StringBuilder类型并取反
    StringBuilder sb = new StringBuilder(number+"").reverse();
    //将sb和number转化为String类型进行equals判断
    if (sb.toString().equals(number+"")){
        System.out.println("是回文数");
    }else{
        System.out.println("不是回文数");
    }

 

使用数组和do-while循环

    int arr[] = new int[5];// 创建一个大小为5的数组
    int i = 0;
    do {// 逐次取位
        arr[i] = number % 10;
        number /= 10;
        i++;
    } while (i < 5);
    if (arr[0] == arr[4] && arr[1] == arr[3]) {
        System.out.println("是回文数");
    } else {
        System.out.println("不是回文数");
    }

 

使用StringBuilder类 和 左右两个指针。

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        Main main = new Main();
        int number = console.nextInt();
        System.out.println(main.palindromeNumber(number));
    }
 
    public Boolean palindromeNumber(int number) {
        StringBuilder str=new StringBuilder();
        str.append(number);
        int left=0;
        int right=str.length()-1;
        while(left<right){
            if(str.charAt(left)!=str.charAt(right)){
                return false;
            }else{
                left++;
                right--;
            }
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值