2016-10-12 6 views
-1

私はJavaを初めて使いました。これは私の髪を裂かせることです。ご注意スキャナが正しく機能しているかどうかを確認するためにprintステートメントを追加しました。mainメソッドでユーザー入力がnullを返すのはなぜですか?

package dknowlton_program5; 

import java.util.Scanner; 

//Driver ~ Gathers Input 

public class DKnowlton_MartianMaker { 

static Scanner userInput = new Scanner(System.in); 

public static String name; 
public static int eyes, arms; 

public static void main(String[] String) 
{ 

    printWelcome(); 
    getName(); 
    getEyes(); 
    getArms(); 

    System.out.print("Your martian " + name + " has... "); 

} 

public static void printWelcome() 
{ 

    System.out.print("Welcome to the Martian Program Revamped!"); 

} 

public static String getName() 
{ 

    System.out.print("\nWhat would you like to name your martian? "); 
    String name = userInput.nextLine(); 

    System.out.println(name); 

    return name; 

} 

public static int getEyes() 
{ 

    System.out.print("How many eyes does your martian have? "); 
    int eyes = userInput.nextInt(); 

    return eyes; 

} 

public static int getArms() 
{ 

    System.out.print("How many arms does your martian have? "); 
    int arms = userInput.nextInt(); 

    return arms; 

} 

} 
+1

あなたは、変数に戻り値のいずれかを割り当てていません。 **メインメソッド内** ** –

+1

たとえば、 'name = getName();' –

+5

メソッド内で同じ名前の変数を使用しているのではないかもしれませんが、メソッドで宣言された変数は** local * *変数とメソッド内でのみ表示されます。それらを変更すると、上に宣言したクラスフィールドには影響しません。これはJavaの本の最初の章または2章でよく説明されています。 –

答えて

1

次のように動作します。上部の静的変数が削除されていることに注目して、代わりに関数から返された結果を保存するようになりました。 私はJavaのスコープについて読むことをお勧めします。一般的にスコープの可能な限り低いレベルを持つことが最善です。グローバル変数は使用できません。

package dknowlton_program5; 

import java.util.Scanner; 

//Driver ~ Gathers Input 

public class DKnowlton_MartianMaker { 

static Scanner userInput = new Scanner(System.in); 

public static void main(String[] String) 
{ 

    printWelcome(); 
    String name = getName(); 
    int eyes = getEyes(); 
    int arms = getArms(); 

    System.out.print("Your martian " + name + " has... "); 

} 

public static void printWelcome() 
{ 

    System.out.print("Welcome to the Martian Program Revamped!"); 

} 

public static String getName() 
{ 

    System.out.print("\nWhat would you like to name your martian? "); 
    String name = userInput.nextLine(); 

    System.out.println(name); 

    return name; 

} 

public static int getEyes() 
{ 

    System.out.print("How many eyes does your martian have? "); 
    int eyes = userInput.nextInt(); 

    return eyes; 

} 

public static int getArms() 
{ 

    System.out.print("How many arms does your martian have? "); 
    int arms = userInput.nextInt(); 

    return arms; 

} 

} 
+0

上記の問題と同じ問題はありません。 –

+0

私はちょうどそれをテストし、それは正常に動作します。あなたは、目と腕を含めるために上部のprintステートメントを調整する必要があります。それ以外は動作します。 あなたはどんなエラーが表示されますか? – wybourn

1

代わりのSystem.out.print("Your martian " + name + " has... "); あなたはSystem.out.println("Your Martian " + getName() + " has... ");

はそれが動作を願って使用しないでください。

EDIT:なぜString名を2回宣言しましたか?

SECOND EDIT:この "名前" この

package dknowlton_program5; 

import java.util.Scanner; 

//Driver ~ Gathers Input 

public class DKnowlton_MartianMaker { 

Scanner userInput = new Scanner(System.in); 

public String name; 
public static int eyes, arms; 

public static void main(String[] String) 
{ 
DKnowlton_MartianMaker start = new DKnowlton_MartianMaker(); 
    start.printWelcome(); 
    start.getName(); 
    start.getEyes(); 
    start.getArms(); 

    System.out.print("Your martian " + getName() + " has... "); 

} 

public void printWelcome() 
{ 

    System.out.print("Welcome to the Martian Program Revamped!"); 

} 

public String getName() 
{ 

    System.out.print("\nWhat would you like to name your martian? "); 
    name = userInput.nextLine(); 

    System.out.println(name); 

    return name; 

} 

public int getEyes() 
{ 

    System.out.print("How many eyes does your martian have? "); 
    int eyes = userInput.nextInt(); 

    return eyes; 

} 

public int getArms() 
{ 

    System.out.print("How many arms does your martian have? "); 
    int arms = userInput.nextInt(); 

    return arms; 

} 

}

+0

静的メソッドをすべて宣言するのではなく、オブジェクトを使用してそこからメソッドを呼び出しました。 –

+0

-WUB WUB m8ありますか? –

+0

申し訳ありませんが、私は先生の予定通りに土曜日にスケジューリングをしてしまったので、私は本当に不満を感じています。 –

0

をお試しください:

public static String name; 

は、この "名前" differnt形式です:

String name = userInput.nextLine(); 
  • 2番目の値に値を割り当て、最初の値を出力します。そのため、nullが返されます。

  • あなたは、単に文字列を削除し、同じ「名前」あなたが最初に定義する(最初の1)を使用することができます。

    package dknowlton_program5; 
    import java.util.Scanner; 
    
    //Driver ~ Gathers Input 
    
    public class DKnowlton_MartianMaker { 
    
    static Scanner userInput = new Scanner(System.in); 
    
    public static String name; 
    public static int eyes, arms; 
    
    public static void main(String[] String) 
    { 
    
        printWelcome(); 
        getName(); 
        getEyes(); 
        getArms(); 
    
        System.out.print("Your martian " + name + " has... "); 
    
    } 
    
    public static void printWelcome() 
    { 
    
        System.out.print("Welcome to the Martian Program Revamped!"); 
    
    } 
    
    public static String getName() 
    { 
    
        System.out.print("\nWhat would you like to name your martian? "); 
        name = userInput.nextLine(); 
    
        System.out.println(name); 
    
        return name; 
    
    } 
    
    public static int getEyes() 
    { 
    
        System.out.print("How many eyes does your martian have? "); 
        int eyes = userInput.nextInt(); 
    
        return eyes; 
    
    } 
    
    public static int getArms() 
    { 
    
        System.out.print("How many arms does your martian have? "); 
        int arms = userInput.nextInt(); 
    
        return arms; 
    
    } 
    
    } 
    
関連する問題