我写了一个java野餐游戏(非常基本),我唯一不知道该怎么做的是让程序不接受同一个字母的项目。我还希望程序列出用户输入被拒绝项目的次数。请注意,这允许任何项目的排序,只要没有两个项目以相同的字母开头(dis- 关于案件)。可接受的输入序列将是 芥末 , 番茄酱 , 豆腐 , 鳀鱼 。 然而, 芥末 , 番茄酱 , 豆腐 ,和 水壶玉米 自从\ 水壶玉米 “开始 用同样的字母作为\ 番茄酱
import java.util.*;
public class PlayPicnic
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Picnic picnic = new Picnic();
ArrayList<String> unaccepted = new ArrayList<>();`enter code here`
while (picnic.numberOfItems() < 5)
{
System.out.print("What do you want to bring on the picnic? ");
String item = scan.nextLine();
if (picnic.okayToBring(item))
{
picnic.add(item);
}
else
{
if(!unaccepted.contains(item)) unaccepted.add(item);
System.out.println("Sorry, you can't bring " + item);
}
}
System.out.println("\nHere's what we'll have at the picnic:");
picnic.show();
System.out.println(Arrays.toString(unaccepted.toArray()));
}
}
import java.util.*;
public class Picnic
{
// INSTANCE VARIABLES:
private ArrayList<String> stuffToBring; // items to bring on the picnic
// CONSTRUCTOR:
//-----------------------------------------------------
// Construct a new Picnic.
//-----------------------------------------------------
public Picnic()
{
stuffToBring = new ArrayList<String>(); // initialize list
}
//-----------------------------------------------------
// Given an item s, see if it's okay to add it to the list.
// Return true if it is, false otherwise:
//-----------------------------------------------------
public boolean okayToBring(String s)
{
// "Secret rule" -- s can't be an item already in the list:
if (stuffToBring.contains(s)) // "contains" is in the ArrayList class
{
return false;
}
else
{
return true;
}
}
//-----------------------------------------------------
// Given an item s, add it to the list (if it's okay to add it)
//-----------------------------------------------------
public void add(String s)
{
if (okayToBring(s)) // this test keeps people from cheating!
{
stuffToBring.add(s);
}
}
//-----------------------------------------------------
// Print the items in the list
//-----------------------------------------------------
public void show()
{
for (int i = 0; i < stuffToBring.size(); i++)
{
String s = stuffToBring.get(i);
System.out.println(s);
}
}
//-----------------------------------------------------
// Returns the number of items in the list:
//-----------------------------------------------------
public int numberOfItems()
{
return stuffToBring.size();
}
}
答案 0 :(得分:0)
如果第一个字符相同(忽略大小写),请创建自定义Set
以删除重复项。
Set<String> unaccepted =new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Character first=Character.toLowerCase(o1.charAt(0));
Character second=Character.toLowerCase(o2.charAt(0));
return first.compareTo(second);
}
});
现在,将值添加到此Set
。它将忽略相同的第一个Character
数据。
更改while循环,如下所示
while (unaccepted.size()<5){
System.out.print("What do you want to bring on the picnic? ");
String item = scan.nextLine();
unaccepted.add(item);
}
答案 1 :(得分:0)
以下是使用第一个字符
检查列表中项目的逻辑public boolean checkItem(String input, List<String> items) {
String inputFirstChar = input.substring(0, 1);
boolean exist = false;
for (String item : items) {
String itemFirstChar = item.substring(0, 1);
if(itemFirstChar.equalsIgnoreCase(inputFirstChar)) {
exist = true;
break;
}
}
return exist;
}
private ArrayList<String> stuffToBring;
使用接口而不是ArrayList实现来创建引用变量类型,就像这样做
private List<String> stuffToBring;
答案 2 :(得分:0)
要拒绝使用第一个字母的单词,请在“Picnic”类中添加一个简单的字符串:
private String usedLetters = "";
然后在方法“okayToBring”中检查字母是否已被使用:
public boolean okayToBring(String s) {
return (usedLetters.indexOf(s.toLowerCase().charAt(0)) == -1); // letter not contained in String
}
并在方法“add”中将新单词的第一个字符附加到此字符串:
public void add(String s)
{
if (okayToBring(s))
{
stuffToBring.add(s);
usedLetters += s.toLowerCase().charAt(0);
}
}
关于你的第二个问题,你的措词有点不清楚。如果您想要计算特定项目未成功输入的次数,您可以使用Hashmap存储被拒绝的字符串及其计数:
private HashMap<String, int> unaccepted = new HashMap<String, int>();
然后你的程序的“else”子句如下所示:
int newcount = (unaccepted.containsKey(item) ? unaccepted.get(item)++ : 1);
unaccepted.put(item, newcount);
System.out.println("Sorry, you can't bring " + item + "(" + unaccepted.get(item) + " unsuccessful tries)");
如果您只想计算不成功条目的总数,请使用Set和println(unaccepted.size());