2017-03-10 12 views
0

私はこのサイトと同様に一般的なコーディングにはとても新しいので、助けてください!変数が動作している他の変数と同じであるにもかかわらず、変数が初期化されていない

変数strが初期化されないため、この短いコードは実行されません。 期待通りに動く他のいくつかの変数と同じように見えます。

私の質問は、どうしてこれを解決するのかと同様に起こっているのです。

ここで、それが作成されるときに初期化されていない

int str;

becuaseコード

package firstgameattempt1; 

import java.util.Scanner; 

public class CreateChar { 
    public static void main (String Args[]){ 

     System.out.println("please enter your Characters name"); 
     Scanner in = new Scanner (System.in); 
     String Cname = in.next(); 
     System.out.println("so your name is "); 
     System.out.println(Cname); 
     System.out.println("thats the dumbest thing ive ever heard"); 

     int str; 
     int intelligence; 
     int speed; 
     int hp; 
     int maxhp; 

     System.out.println("enter 1 if you are a warrior, 2 if you are a mage, or 3 if you are a thief "); 
     int Cclass = in.nextInt(); 
     if (Cclass == 1) 
      str = 10; 
     intelligence = 5; 
     speed = 7; 
     hp= 100; 
     maxhp = 100; 
     System.out.println ("your strength is"); 

     //here is the problem 
     System.out.println (str); 
     //here is the problem 

     System.out.println ("your intelligence is"); 
     System.out.println (intelligence); 
     System.out.println ("your speed is"); 
     System.out.println (speed); 
     System.out.println ("you have "); 
     System.out.println (hp);  
     System.out.println ("hitpoints"); 
    } 
} 
+0

私はJavaを使用しているはずです。 – Forrest

答えて

1

この問題が発生している(このような設定として= 0)。

あなたは10に値を設定するコードを持っていますが、あなたのif(Cclass==1)文の条件はtrueである場合にのみそれが起こるので、その文がある場合falsestrは初期化されていないままであろう。 Cclass == 1かどうかにかかわらず、常に値を保持していることを確認してください。

+0

迅速な対応をありがとう!もし私がフォローアップの質問を持っているかもしれません。なぜこの問題は後続の変数に影響しませんか? – Forrest

+0

あなたは、 'Cclass == 1'の場合にのみ、これらの変数をすべて設定しておいたと思います。 'if'文を使うには2つの方法があります。最初の方法は、文が真であるときに次の行だけが実行され、もう一方が 'if(true){// do some things}'のようなブロックで実行されるので、 Javaは 'if'条件の結果として' str'を設定したかったと思っているので、これらの値を設定する行が実行されているため、他のものとの間でエラーが発生します。このページには詳細がありますhttps://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html –

+1

もう一度Carlさん! – Forrest

0

あなたのインデントから、すべての割り当てをifステートメントの一部にしたいと思っています。ブロックの中にそれを入れて、そのよう:

if (Cclass == 1) { 
     str = 10; 
     intelligence = 5; 
     speed = 7; 
     hp= 100; 
     maxhp = 100; 
} 

あなたは、しかし、まだ変数が正しいれ、初期化されていない可能性があること警告が表示されます。コードを見てください。以前に何が起きても変数を使用(印刷)していますが、初期化には条件があります。あなたはこのような何かを行うことができます:

if (Cclass == 1) { 
     str = 10; 
     ... 
} else { 
    str = 0; 
    ... 
} 

をもう一つの方法は、前にそれらを初期化することです:

int str = 0; 
... 
if (Cclass == 1) { 
     str = 10; 
     ... 
} 

はたぶん、これらのどれもあなたのケースに適していませんが、ポイントは、Javaが使用を許可していないということですコンパイル時にチェックされます。

Pythonのコーディングを試したことがあるのか​​どうかはわかりませんが、間違いはPythonコードの典型です。 Javaでは、字下げは構文に対して何もしません。 Pythonではインデントを使用してブロックを指定します。 Javaや他の多くの言語では、代わりに{}を使用します。

+0

答えをありがとう! – Forrest

関連する問題