【问题标题】:User Input from Class to Main Class in JavaJava中从类到主类的用户输入
【发布时间】:2018-05-30 14:47:31
【问题描述】:

我正在尝试创建一个程序,该程序 (1) 提示输入用户的全名,然后生成用户名; (2) 提示输入一个数字,然后判断该数字是奇数还是偶数。我写了用户名和奇/偶类的代码,并想从主类中调用它们。但是,当从主类调用时,username 方法在生成用户名之前会提示用户两次,而奇/偶方法实际上并不能确定用户输入的数字是奇数还是偶数。当我从用户名类中删除扫描仪对象时,我得到一个超出范围的编译错误,所以我不得不把它放回去,这样程序才能运行。我应该使用 return 语句吗?

用户名

/**
 * Class to generate the username based on user's first name and randomly generated numbers
 */
public void username()
{
    Scanner inputReader = new Scanner(System.in);
    String fullName = inputReader.nextLine();
    // create random object and variable to store it in
    Random randomizer = new Random();
    int randomNumber = randomizer.nextInt(1000);
    // create variable to store lowercase username
    String lowercase = (fullName.toLowerCase());
    // create string variable to format username to first three characters in lowercase
    String firstThreeLetters = (lowercase.substring(0, 3));
    // concatenate lowercase characters and random number
    String usernameFinal = (firstThreeLetters + randomNumber);
    // print out final username
    System.out.println("Your username is " + usernameFinal);
}

奇/偶

/**
 * Class to determine if a user inputted value is odd or even
 */
public void OddEven1()
{
    Scanner inputReader = new Scanner(System.in);
    int userInteger = 0;
    // if/else to determine if number is odd or even
    if (userInteger % 2 == 0)
    {
        System.out.println(userInteger + " is an even number.");
    }
    else
    {
        System.out.println(userInteger + " is an odd number.");
    }
}

主要方法

{
/**
 * This class holds the main method through which all other classes are run.
 */
public static void main(String[] args)
{
    // create objects
    Username usernameGenerator = new Username();
    OddEven oddeven = new OddEven();
    Scanner inputReader = new Scanner(System.in);

    // prompt for real name and print username
    System.out.print("Name: ");
    String fullName = inputReader.nextLine();
    usernameGenerator.username();

    // prompt for number
    System.out.print("Give me a number: ");
    // variable to store value
    int userInteger = inputReader.nextInt();
    oddeven.OddEven1();
}

输出:

【问题讨论】:

  • 您基本上必须在 main 或自定义类中读取输入,您不需要两次..

标签: java class java.util.scanner user-input main


【解决方案1】:

你应该像下面这样改变你的代码

main方法内部

System.out.print("Give me a number: ");
    // variable to store value
    int userInteger = inputReader.nextInt();
    oddeven.OddEven1(userInteger );

奇数/偶数

public void OddEven1(int userInteger )
{

    // if/else to determine if number is odd or even
    if (userInteger % 2 == 0)
    {
        System.out.println(userInteger + " is an even number.");
    }
    else
    {
        System.out.println(userInteger + " is an odd number.");
    }
}

现在让我们讨论一下用户名。您已经从 main 方法中捕获了用户名。所以你不需要再次从用户那里获取它。

String fullName = inputReader.nextLine();
    usernameGenerator.username(fullName );

public void username(String fullName )
{
//Your logic
}

【讨论】:

    【解决方案2】:

    1 - 你请求用户名两次,这里一次

    String fullName = inputReader.nextLine();
    

    这里有一个

    Scanner inputReader = new Scanner(System.in);
    String fullName = inputReader.nextLine();
    

    我建议保留第一种方法并将fullName 传递给username() 函数。举个例子:

    /**
      * Class to generate the username based on user's first name and 
       randomly generated numbers
        */
       public void username(fullName)
       {
        // create random object and variable to store it in
        Random randomizer = new Random();
        int randomNumber = randomizer.nextInt(1000);
        // create variable to store lowercase username
        String lowercase = (fullName.toLowerCase());
        // create string variable to format username to first three characters in lowercase
        String firstThreeLetters = (lowercase.substring(0, 3));
        // concatenate lowercase characters and random number
        String usernameFinal = (firstThreeLetters + randomNumber);
        // print out final username
        System.out.println("Your username is " + usernameFinal);
    }
    

    2 - 您在第二个函数 OddEven1() 中执行相同操作。我也建议将参数传递给它。例如:

    public void OddEven1(number)
     {
       int userInteger = number;
       // if/else to determine if number is odd or even
        if (userInteger % 2 == 0)
         {
          System.out.println(userInteger + " is an even number.");
          }
        else
         {
           System.out.println(userInteger + " is an odd number.");
         }
     }
    

    3 - 所以你的主要功能变成:

    public static void main(String[] args)
    {
    // create objects
    Username usernameGenerator = new Username();
    OddEven oddeven = new OddEven();
    Scanner inputReader = new Scanner(System.in);
    
    // prompt for real name and print username
    System.out.print("Name: ");
    String fullName = inputReader.nextLine();
    usernameGenerator.username(fullName);
    
    // prompt for number
    System.out.print("Give me a number: ");
    // variable to store value
    int userInteger = inputReader.nextInt();
    oddeven.OddEven1(userInteger);
    }
    

    【讨论】:

    • 非常感谢!澄清一下,每当我想在另一个类中使用来自主类的用户输入时,我必须使用参数吗?
    • 这是一种让主类处理用户输入并将其传递给函数的便捷方式。但是,您可以为所欲为。对于我自己,我更喜欢将参数传递给函数。另外,我认为你需要修改一些面向对象编程的概念,这样你才能更了解事情。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多