![](/img/trans.png)
[英]I have an arrayList where each element is an array of integers of length . How do i use .contains method here?
[英]How do I remove an element the user input from an ArrayList when it contains both strings and integers?
我是编码新手,我对 ArrayList 的工作方式感到非常困惑。
我有 [Java] 代码:
ArrayList<Object> allCards = new ArrayList<Object>();
allCards.add(2);
allCards.add(2);
allCards.add(3);
allCards.add('K');
allCards.add('J');
打印出allCards
ArrayList,我有:
[2, 2, 3, K, J]
现在,我需要接受用户输入,并从 ArrayList 中删除用户输入。 我怎么做?
我可以使用
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
allCards.remove(new Integer(i));
如果 ArrayList 仅包含整数,但用户输入可以是 char 或 int,我如何从 ArrayList 中删除它?
此外,如果 ArrayList 中有两个相同的用户输入,如数字 2,我只想删除其中一个。
谢谢你。
我认为如果你只使用 ArrayList 和字符串类型,你的问题就可以解决,比如:
ArrayList<String> allCards = new ArrayList<String>();
关于如何移除数组列表中的元素,您可以从用户那里获取字符串中的输入,然后将其与数组列表中的元素进行比较。 当您使用 remove() 方法时,如果输入字符串匹配(区分大小写)元素,它只会删除第一个匹配项,如果不匹配,则不会。 您可以测试此代码:
ArrayList<String> allCards = new ArrayList<String>();
allCards.add("2");
allCards.add("2");
allCards.add("3");
allCards.add("K");
allCards.add("J");
System.out.println("The Array List before user input: ");
for (String card : allCards) {
System.out.print(card + " ");
}
System.out.println();
Scanner scanner = new Scanner(System.in);
System.out.print("Input to remove from Array List: ");
String input = scanner.nextLine();
allCards.remove(input);
System.out.println("The Array List after user input: ");
for (String card : allCards) {
System.out.print(card + " ");
}
scanner.close();
因此,您希望能够从输入中读取int
或char
。 我想你必须为你的输入字符串定义一个语法,这将允许你决定它是一个int
还是一个char
。 您可以为此使用正则表达式。
例子:
private static final Pattern RE
= Pattern.compile("^\\s*(?:([0-9]+)|'(.)')\\s*");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
Matcher matcher = RE.matcher(s);
if (!matcher.matches()) {
System.out.println("Bad input");
} else {
Object key;
if (matcher.group(1) != null) {
key = Integer.valueOf(matcher.group(1));
} else {
key = matcher.group(2).charAt(0);
}
allCards.remove(key);
System.out.println(allCards);
}
这个问题有两个部分,首先您需要正确读取一个字符或 integer,然后将其从列表中删除。 首先逐行转换为 int 或 char 然后使用迭代器循环列表并删除 object 并中断。
public static void main(String[] args) {
List<Object> allCards = new ArrayList<>();
allCards.add(2);
allCards.add(2);
allCards.add(3);
allCards.add('K');
allCards.add('J');
Scanner scan = new Scanner(System.in);
while (true) {
String line = scan.nextLine();
try {
int num = Integer.parseInt(line);
for(Iterator<Object> it = allCards.iterator(); it.hasNext(); ) {
Object o = it.next();
if ((o instanceof Integer) && (Integer) o == num) {
allCards.remove(o); break;
}
}
} catch (Exception ex) {
char c = line.charAt(0);
for(Iterator<Object> it = allCards.iterator(); it.hasNext(); ) {
Object o = it.next();
if ((o instanceof Character) && (Character) o == c) {
allCards.remove(o); break;
}
}
}
}
}
您可以扩展它以支持更多对象类型。
假设您不能更改数组allCards
的类型,您必须将输入转换为 Integer 和 Character 并检查它们是否包含在列表中:
final List<Object> allCards = new ArrayList<Object>();
allCards.add(2);
allCards.add(2);
allCards.add(3);
allCards.add('K');
allCards.add('J');
final Scanner scanner = new Scanner(System.in);
final String i = scanner.nextLine();
try {
allCards.remove(Integer.valueOf(i));
} catch(NumberFormatException e) {
// safe to ignore
}
allCards.remove(Character.valueOf(i.charAt(0)));
scanner.close();
但是,如果您正在实施某种纸牌游戏,您应该考虑引入 class 或卡牌枚举类型,并使用强类型卡牌列表。 例如像这样:
final List<Card> allCards = new ArrayList<Card>();
allCards.add(new Card(CardValue.C2));
allCards.add(new Card(CardValue.C2));
allCards.add(new Card(CardValue.C3));
allCards.add(new Card(CardValue.CK));
allCards.add(new Card(CardValue.CJ));
playCard(allCards);
System.out.println("The Array List after user input: ");
for (Card card : allCards) {
System.out.print(card.getValue() + " ");
}
private void playCard(List<Card> allCards) {
final Scanner scanner = new Scanner(System.in);
final String i = scanner.nextLine();
scanner.close();
final CardValue cardValue = CardValue.getCardValue(i);
final Optional<Card> foundCard = allCards.stream().filter(c -> c.getValue() == cardValue).findAny();
if (foundCard.isPresent()) {
allCards.remove(foundCard.get());
} else {
throw new IllegalArgumentException("You have no card with value " + i);
}
}
private class Card {
private final CardValue value;
private Card(CardValue value) {
this.value = value;
}
private CardValue getValue() {
return value;
}
}
private enum CardValue {
C2("2"),
C3("3"),
// all other values ...
CJ("j"),
CK("k");
private final String value;
CardValue(String value) {
this.value = value;
}
public CardValue getCardValue(String value) {
for (CardValue c : CardValue.values()) {
if (c.value.equals(value.toLowerCase().substring(0, 1))) {
return c;
}
}
throw new IllegalArgumentException("Illegal card value " + value);
}
}
玩得开心!
您可以使用Collection.removeIf :
allCards.removeIf(obj -> obj instanceof Integer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.