JAVA47 记录点赞用户
描述
为了实现社区点赞功能,要求设计一个点赞记录器,该工具包含如下两个方法:
like方法:该方法需要传入用户名作为参数,如果用户没点赞过,则记录本次点赞行为,若用户已经点赞过,则删除他的点赞行为。
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;
}
}