2017-07-22 11 views
1

最近私はjavaを学び始めました。いくつかの知識の後、私はいくつかのプログラムから始まります。だから私はジャングルの単語のゲームを作成します。それは動作しますが、私は問題があります。ここに私のコードがある....「CHAIN」の場合は、今arraylistの文字列とchar型の配列を比較するにはどうすればいいですか

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.*; 
class JumbleWords 
{ 
public static void main(String args[]) 
{ 
    Scanner scan = new Scanner(System.in); 
    ArrayList <String>alist = new ArrayList<String>(); 
    ArrayList <Character>chars = new ArrayList<Character>(); 
    Random rd = new Random(); 
    int listLimit,charLimit,value,ulimit=0,counter=0; 
    String string,temp; 
    alist.add("done"); 
    alist.add("nest"); 
    alist.add("rat"); 
    alist.add("cat"); 
    alist.add("hello"); 
    alist.add("cycle"); 
    alist.add("chain"); 
    alist.add("paint"); 
    alist.add("collect"); 
    alist.add("your"); 
    alist.add("gift"); 
    alist.add("card"); 
    alist.add("today"); 
    alist.add("cheer"); 
    alist.add("what"); 
    alist.add("time"); 
    alist.add("share"); 
    alist.add("build"); 
    alist.add("help"); 
    alist.add("success"); 
    alist.add("career"); 
    alist.add("access"); 
    alist.add("learn"); 
    alist.add("course"); 
    alist.add("year"); 
    alist.add("expert"); 
    alist.add("school"); 
    alist.add("floor"); 
    alist.add("season"); 
    alist.add("education"); 
    alist.add("spread"); 
    listLimit = alist.size(); 
    int i=0; 
    System.out.println(); 
    System.out.println("How many JumbleWords you want to play..."); 
    System.out.println("Max limit is "+listLimit); 
    ulimit = scan.nextInt(); 
    scan.nextLine(); 
    if(ulimit < listLimit) 
    { 
    while(i<ulimit) 
    { 
     value = rd.nextInt(listLimit); 
     string = alist.get(value); 
     for (char c : string.toCharArray()) 
     { 
     chars.add(c); 
     } 
     Collections.shuffle(chars); 
     Collections.shuffle(chars); 
     System.out.println(chars); 
     System.out.println("\nEnter the correct order of the word."); 
     temp = scan.nextLine(); 
     if(string.equalsIgnoreCase(temp)==true){ 
      System.out.println("You Win......"); 
      System.out.println("(*^*)"); 
      System.out.println(); 
      ++counter; 
     } 
     else{ 
      System.out.println("You Lose......"); 
      System.out.println("The correct word is :-"); 
      System.out.println(string); 
      System.out.println("(*_*)"); 
      System.out.println(); 

     } 
     chars.clear(); 
     alist.remove(value); 
     i++; 
    } 

    System.out.println("Your Score is "+counter+" out of "+ulimit); 
    System.out.println(); 
} 
else 
{ 
    System.out.println("Not enough words we have..."); 
    System.out.println(); 
} 
} 
} 

は勝つためsuffleとユーザーを入力しなければならない鎖であるが、「CHINA」も同じ文字を持つ単語です。どのように私はそれのためのロジックを構築することができます。

答えて

0

あなたが単語全体を比較することができます:

while(i<ulimit) 
{ 
    value = rd.nextInt(listLimit); 
    string = alist.get(value); 
    if(string.equalsIgnoreCase(value)){ 
     System.out.println("You Win......"); 
     System.out.println("(*^*)"); 
     System.out.println(); 
     ++counter; 
    } 
... 
0

まず、あなたのコードは本当に読めるまっすぐではありません。
特定の問題を実装している間は、変数名は非常に悪いものです: 単語ゲーム。
のほかに変数があまりにも早いと宣言すると、と広すぎる範囲があります。エラーが発生しやすく、読みにくいです。もあります。

コード全体を読まずにこれらのステートメントを理解するにはどうすればよいですか?

string = alist.get(value); 

または:

String wordToGuess = wordsToGuess.get(value); 

と::

if(wordToGuess.equalsIgnoreCase(userInput)){ 

代わりの文字列のリストを使用して

if(string.equalsIgnoreCase(temp)==true){ 

それは次のようになります。

ArrayList <String>alist = new ArrayList<String>(); 

使用各インスタンスが格納されますWordToGuessの一覧WordToGuessを宣言することができList<String> anagrams:あなたは、ユーザーの入力が中に含まれているかどうかをチェックするだけで持っている。このように

public class WordToGuess{ 
    private List<String> anagrams; 
    ... 
    public WordToGuess(String... anagrams){ 
     this.anagrams = Arrays.asList(anagrams);   
    } 

    public String getAnyWord(){ 
     return anagrams.get(0); 
    } 

    public boolean contains(String word){ 
     return anagrams.contains(word.toLowerCase()); 
    }  
} 

リスト。

ので

ArrayList <String>alist = new ArrayList<String>(); 

はなります:

List<WordToGuess> wordsToGuess = new ArrayList<WordToGuess>(); 

具象クラス以上の変数の型宣言のインターフェイスを優先。

そして、あなたはこの方法であなたのリストを読み込むことができます:

wordsToGuess.add(new WordToGuess("done", "node")); // two possibilities 
wordsToGuess.add(new WordToGuess("nest")); // one 
... 
wordsToGuess.add(new WordToGuess("chain", "china")); // two 
... 

と期待Stringとの比較入力String

if(wordToGuess.equalsIgnoreCase(userInput)){ 

になります:

if(wordsToGuess.contains(userInput)){ 

それは、無視するケースの仕事を保つ方が良い∎クライアントクラス内でそれを忘れるかもしれないプロバイダクラス。

+0

ありがとうdavidxxx 私はJavaを学ぼうとしています。あなたの提案は本当に役に立ちます。変数宣言のようなものです。今までArrayListを学んでいます。アナグラムとリストについて知りません。だから私は初心者です。私はあなたの提案を覚えています。もう一度お返事ください。 – user8338312

+0

@ user8338312あなたは大歓迎です。 anagram変数は、一連の文字の可能なすべての単語を含む文字列のリストです。 – davidxxx

+0

もう一度ありがとうございます。あなたはまた、より良いレミングのために私にいくつかのウェブサイトや電子書籍を提案することができます。 – user8338312

関連する問題