基于集合实现,逻辑非常简单
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class LiuqianMagic {
public static void main(String[] args) {
//步骤1,选四张牌平均撕成两份叠在一起
List<String> cards = initCards();
Scanner sc = new Scanner(System.in);
//步骤2,根据名字的长度将部分牌放到牌底
moveCardByNameLength(cards, sc);
//步骤3,将前三张牌插入中间
theFirstThreeCardsGoIinTheMiddle(cards, sc);
//步骤4,将第一张牌取出放置在一旁,并将牌顶若干张牌插入牌中间,南方人1张,北方人2张,不确定是南方人还是北方人3张
String topCard = cards.get(0);
cards.remove(0);
accordingToTheNorthAndSouthInsertTheMiddle(cards, sc);
//步骤5,男生扔掉牌顶1张,女生扔掉牌顶2张
throwCardsAccordingToGender(cards, sc);
//步骤6,输入魔法七字箴言,每说一个字,取出牌顶一张牌放在牌底
sevenWordMotto(cards, sc);
//步骤7,从牌顶开始,每次先将牌顶的一张牌放在牌底,再扔掉牌顶的一张牌,重复以上操作,直到只剩一张牌
repeatUntilThereIsOnlyOneLeft(cards, sc);
if (cards.get(0).equals(topCard)) {
System.out.println("恭喜您,魔术成功");
}
}
private static void repeatUntilThereIsOnlyOneLeft(List<String> cards, Scanner sc) {
int listLength = cards.size();
for (int i = 0; i < listLength; i++) {
String firstCard = cards.get(0);
cards.remove(0);
cards.add(firstCard);
cards.remove(0);
if (cards.size() == 1) {
break;
}
}
}
private static void sevenWordMotto(List<String> cards, Scanner sc) {
System.out.println("请输入魔法口诀:");
String input = sc.nextLine();
if ("见证奇迹的时刻".equals(input)) {
int length = "见证奇迹的时刻".length();
for (int i = 0; i < length % cards.size(); i++) {
String firstCard = cards.get(0);
cards.remove(0);
cards.add(firstCard);
}
}
if (!"见证奇迹的时刻".equals(input)) {
System.out.println("输入有误");
throw new RuntimeException();
}
}
private static void throwCardsAccordingToGender(List<String> cards, Scanner sc) {
System.out.println("请输入性别,1代表男生,0代表女生");
String s = sc.nextLine();
int sex = Integer.parseInt(s);
if (sex == 1) {
cards.remove(0);
} else {
cards.remove(0);
cards.remove(0);
}
}
private static void accordingToTheNorthAndSouthInsertTheMiddle(List<String> cards, Scanner sc) {
System.out.println("请输入牌数:南方为1,北方为2,不确定是南方人还是北方人为3");
String s = sc.nextLine();
int southernersOrNortherners = Integer.parseInt(s);
if (southernersOrNortherners == 1) {
System.out.println("请选择插入第几张牌的后面:输入数字1-5代表插入到第几张牌的后面");
String s1 = sc.nextLine();
int index = Integer.parseInt(s1);
String firstCard = cards.get(0);
cards.remove(0);
cards.add(index, firstCard);
} else if (southernersOrNortherners == 2) {
System.out.println("请选择插入第几张牌的后面:输入数字1-4代表插入到第几张牌的后面");
String s2 = sc.nextLine();
int index = Integer.parseInt(s2);
String firstCard = cards.get(0);
String secondCard = cards.get(1);
cards.remove(0);
cards.remove(0);
cards.add(index, firstCard);
cards.add(index + 1, secondCard);
} else {
System.out.println("请选择插入第几张牌的后面:输入数字1-3代表插入到第几张牌的后面");
String s3 = sc.nextLine();
int index = Integer.parseInt(s3);
String firstCard = cards.get(0);
String secondCard = cards.get(1);
String thirdCard = cards.get(2);
cards.remove(0);
cards.remove(0);
cards.remove(0);
cards.add(index, firstCard);
cards.add(index + 1, secondCard);
cards.add(index + 2, thirdCard);
}
}
private static void theFirstThreeCardsGoIinTheMiddle(List<String> cards, Scanner sc) {
System.out.println("请选择把前三张牌插入的位置:输入数字1-4代表插入到第几张牌的后面");
String s = sc.nextLine();
int index = Integer.parseInt(s);
String firstCard = cards.get(0);
String secondCard = cards.get(1);
String thirdCard = cards.get(2);
cards.remove(0);
cards.remove(0);
cards.remove(0);
cards.add(index, firstCard);
cards.add(index + 1, secondCard);
cards.add(index + 2, thirdCard);
}
private static void moveCardByNameLength(List<String> cards, Scanner sc) {
System.out.println("请输入名字的长度:");
String s = sc.nextLine();
int nameLength = Integer.parseInt(s);
for (int i = 0; i < nameLength % cards.size(); i++) {
String remove = cards.get(0);
cards.remove(remove);
cards.add(remove);
}
}
private static List<String> initCards() {
List<String> cards = new ArrayList<>();
for (int i = 0; i < 2; i++) {
cards.add("恭喜发财");
cards.add("阖家欢乐");
cards.add("龙年大吉");
cards.add("身体健康");
}
return cards;
}
}