我明白我可能会找到另一个关于"字符串中的重复字符的主题/主题"但他们都与我的问题完全不同。
我创建了一个简单的刽子手游戏,在那里我输入了我将用来玩的词,但是如果我输入一个有重复字符的单词,我的整个程序就变得无用而且不会好好工作。我确实理解为什么会这样做,因为indexOf方法,但我不知道如何解决它。
提前致谢。
以下是代码:
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.println("Welcome to the Hangman game..");
System.out.println("Enter the words you want to play with, '.' to exit");
ArrayList <String> x=new ArrayList<String>();
x.add(s.nextLine());
for(int i=0;!(x.get(i).contains(".") && x.get(i).lastIndexOf(".")==x.get(i).length()-1);i++){
x.add(s.nextLine());
}
x.set(x.size()-1, x.get(x.size()-1).substring(0, x.get(x.size()-1).length()-1));
System.out.println("Okay, a word will be chosen randomly, try to guess it!");
Random rand = new Random();
int value = rand.nextInt(x.size()==1 ? x.size():x.size()-1)+0;
char[] chr=new char[x.get(value).length()];
for(int i=0;i<chr.length;i++){
chr[i]='-';
System.out.print(chr[i]);
}
char m;
int n;
Boolean r=true;
while(r){
m = s.next().charAt(0);
n=x.get(value).indexOf(m);
if(n!=-1)
chr[n]=m;
for(int j=0;j<chr.length;j++){
System.out.print(chr[j]);
}
if(new String(chr).indexOf('-') == -1){
r=false;
System.out.println("\nHangman!");
}
}
}
答案 0 :(得分:1)
你可以做这样的事情
String word = "thisandthat";
int pointer = 0;
List<Integer> tPositions = new ArrayList<>();
while((pointer=word.indexOf("t", pointer))!=-1){
tPositions.add(new Integer(pointer++));
}
循环结束后,它将找到&#34; t&#34;的所有位置。在字符串中。这是因为indexOf()
可以采用两个参数,第一个是搜索字符串,第二个是从中开始的索引。当可测试区域中的搜索字符串不存在时indexOf()
返回-1
哦,你必须将指针增加一个:
tPositions.add(new Integer(pointer++));
否则你将陷入无限循环,因为它只会继续找到指定字符的实例。
答案 1 :(得分:1)
有一个indexOf方法,它接受两个参数,字符和索引来开始搜索。在循环中调用它将显示给定字符的每次出现。
不是
n=x.get(value).indexOf(m);
if(n!=-1)
chr[n]=m;
你可以写
int n = x.get(value).indexOf(m);
while(n!=-1) {
chr[n] = m;
n = x.get(value).indexOf(m, n + 1);
}