2016-06-25 13 views
1

「Head First Java」という本からこのコードを練習していましたが、ここでのループの位置付けについてはかなり混乱しています。このコードはランダムなドットコムの単語を含む種類のゲームを作成するためのものです(例:abc .com)いくつかの配列要素を占めています。ここで私はそのドットコムの言葉に配列の3から5の位置を与え、ユーザーはその位置を推測しようとします。このコードをループに入れて、結果が "kill"になるまで毎回ユーザに入力するようにする方法はありますか?

import java.util.Scanner; 

public class RunTheGame { 

    public static void main(String[] args) { 

     MainGameClass sampleObj= new MainGameClass(); 
     int[] location = {3,4,5}; 
     sampleObj.setdotcomLocationCells(location); 


     Scanner input= new Scanner(System.in); 
     System.out.println("Enter your guess"); 
     int userGuess=input.nextInt(); 

     String answer = sampleObj.checkForDotcom(userGuess); 
     System.out.println(answer); 

    } 
} 

package simpleDotComGame; 

public class MainGameClass { 
    int[] DotcomLocationCells; 
    int numOfHits=0; 

    public void setdotcomLocationCells(int[] location) { 
     DotcomLocationCells= location; 
    } 

    public String checkForDotcom(int userGuess) { 
     String result="miss"; 
     for(int cell:DotcomLocationCells) { 
      if(cell == userGuess) { 
       result ="hit"; 
       numOfHits++; 
       break; 
      } 
     } // end for loop 

     if(numOfHits == DotcomLocationCells.length) { 
      result = "kill";    
      System.out.println("The number of tries= "+numOfHits); 
     } 
} 

答えて

0

あなたがそれを初期化する前に変数を宣言することが許可されています。

String answer; 
do { 
    answer = sampleObj.checkForDotcom(userGuess); 
    System.out.println(answer); 
} while (!answer.equals("kill"); 

Scanner.nextInt()のセマンティクスの用心:それは(例えば、それは文字が含まれています)intとして入力を解析できない場合には、例外をスローしますが、無効な入力を飛び越えることはありません。強制的にジャンプするにはScanner.nextLine()を使用する必要があります。そうしないと、無限ループが発生します。

+0

ああよく!これは私を攻撃しなかった!迅速な対応に感謝! :) –

3
do { 
     <insert code where answer result is created> 
} while (!answer.equals("kill")) 

UPD:いますが、この方法はObject.classをで宣言された方法を見る場合は

public boolean equals(Object obj) { 
    return (this == obj); 
を見つけるために、あなたは、正しい使用のためのequalsメソッドをオーバーライドする必要があります
+0

Javaで文字列の等価性をチェックする方法ではありません。 –

+0

それにもかかわらず、リテラルの '' kill "'が変数に割り当てられているので、これはうまくいくでしょう。 –

+1

"kill" ==答えが同じではないので、実際にはMarkroはありません。結果は "kill"です。これらは異なるオブジェクトです。一意のオブジェクトを定義する静的な最終変数はありません – Deceiver

0

Rachna、ループは次のコードの周囲に配置されます:

Scanner input= new Scanner(System.in); 
System.out.println("Enter your guess"); 
int userGuess=input.nextInt(); 

String answer=sampleObj.checkForDotcom(userGuess); 
System.out.println(answer); 
//For string you must use the equals 
if ("kill".equals(answer)){ 
    break; 
} 

なぜなら、killコマンドはループ内で評価され、すべてのターゲットにヒットするまで入力を継続して入力する必要があるからです。

0

ループの配置方法は次のとおりです。

String answer = ""; 
do{ 
    System.out.println("Enter your guess"); 
    int userGuess=input.nextInt(); 

    answer=sampleObj.checkForDotcom(userGuess); 
    System.out.println(answer); 
} 
while(!answer.equals("kill")); 

:あなたは何をやっている知っている限り(あなたが文字列定数プールの概念を知っている限り、としても読み)Javaで==を使用して文字列の等価性をチェックしないでください。

+0

私はこれの初心者であり、私たちがオブジェクトに使うように、「答え」をそのように使うことができるかどうか本当に分かっていませんでした。また、Stringの答えがdoループの中で宣言されているので、while条件の変数のエラーに直面しています。 –

+0

@RachnaBalani 'answer'は実際には' String'クラスのオブジェクトなので、オブジェクトとして使用してメソッドを呼び出すことができます。これが助けになったら答えとして記入してください。 :) –

+0

このコードはOPが説明された理由でコンパイルされません。 –

関連する問題