字符串

时间:2016-09-02 15:19:47

标签: java

我明白我可能会找到另一个关于"字符串中的重复字符的主题/主题"但他们都与我的问题完全不同。

我创建了一个简单的刽子手游戏,在那里我输入了我将用来玩的词,但是如果我输入一个有重复字符的单词,我的整个程序就变得无用而且不会好好工作。我确实理解为什么会这样做,因为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!");
        }
    }   
}

2 个答案:

答案 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);
}