【问题标题】:Why is my user input returning null in main method?为什么我的用户输入在 main 方法中返回 null?
【发布时间】:2016-10-12 11:04:37
【问题描述】:

我是 Java 新手,这让我大吃一惊。请注意,我添加了一条打印语句以确保 Scanner 正常工作。

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;

}

}

【问题讨论】:

  • 您没有将任何返回值分配给变量。 在主方法中
  • 例如,name = getName();
  • 您可能会感到困惑,因为您在方法中使用了同名变量,但在方法中声明的变量是本地变量,并且仅在方法中可见.更改它们不会影响您在顶部声明的类字段。这在大多数 Java 入门书籍的前一章或两章中都有很好的解释。
  • @HovercraftFullOfEels 当我添加返回值并运行程序时,它会重复 getName() 方法,然后在 main 方法中打印出没有空格的打印语句。但是,现在 null 被替换为空格而不是用户输入变量。请帮忙!

标签: java class variables methods null


【解决方案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;

}

}

【讨论】:

  • 不存在上述评论中提到的相同问题。
  • 我刚刚测试了它,它工作正常。您需要调整顶部的打印声明以包括眼睛和手臂。除此之外它有效。你看到了什么错误?
【解决方案2】:

而不是System.out.print("Your martian " + name + " has... "); 你不应该使用System.out.println("Your Martian " + getName() + " has... ");

希望它有效。

编辑:为什么要两次声明字符串名称?

第二次编辑:试试这个

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;

}

}

【讨论】:

  • 我没有将所有方法声明为静态,而是使用了一个对象并从那里调用方法。
  • -WUB WUB m8 你在吗?
  • 很抱歉,我真的很沮丧,因为我的老师把这个截止日期定在星期六,因为她搞砸了日程安排,我必须工作。
  • 我在哪里声明了两次字符串名称?
  • 在主类之前,声明了变量名,在get name方法中,又声明了一遍。
【解决方案3】:

这个“名字”:

public static String name; 

与此“名称”不同:

String name = userInput.nextLine();
  • 您将值分配给第二个,并打印第一个,这就是您得到 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? ");
        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;
    
    }
    
    }
    

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多