在Main创建的输入变量与Method

时间:2015-06-18 18:05:20

标签: java

我创建了一个从用户那里获取输入的方法。但是,我的问题是当我尝试返回方法的值时,它会不断要求输入一个新数字。相反,我希望它只要求一个数字,然后返回它。

例如:以下代码说明了我想要在没有方法的情况下实现的目标,但在方法中包含它会导致困难:

主要工作代码:

 public static void main(String[] args) {
    Scanner input = new Scanner(System.in); 
    int age;

     System.out.print("Enter Age: ");
     age = input.nextInt();

     System.out.print("/nYou're " + age + " years of age.");
  }

但是,当我尝试在方法中执行此操作时,我遇到了困难:

代码内部方法:

  public static int getAge() { 
      Scanner input = new Scanner(System.in);
      int number; 

      number = input.nextInt()
      return number;
    }

问题是,每当我尝试打印System.out.print(getAge());它每次都要求一个数字。为什么第一个代码允许我在不要求新号码的情况下打印年龄,但调用打印数字的方法会导致问题并继续要求新号码。

实际上,我只想调用该方法,要求输入一次数字,然后调用该方法返回用户输入的数字。

3 个答案:

答案 0 :(得分:3)

它不仅仅是有代码来做工作,还有设计。我建议下面的方法,功能是:

  • 实用程序类和通用方法promptUserInput,用于提示用户输入,传递消息
  • 它将返回一个String对象,根据需要将其转换为其他对象。
  • 如果您想从其他方法/类访问它,那么将其存储为实例变量,否则只需使用它进行打印或任何您的计划。

完成所有操作后,您可以处理Scanner对象以关闭它,并且父线程已准备就绪,因此您需要进行一些更改。

P.S。:我的意图不仅仅是提供一大堆代码,而是让你思考如何设计。因此,您可能需要根据您的要求,方案和测试时进行一些更改。

<强>代码:

public class UserTest {    
    public static void main(String[] args) {
        User user = new User();
        user.promptUserAge();
        user.printUserAge(user.getUserAge());
        //DO something.
        user.printUserAge(user.getUserAge());
        user.promptUserAge();
        user.printUserAge(user.getUserAge());
    }
}

public class User {
    private int userAge = 0;

    public void promptUserAge() {
        String userInput = AppUtils.promptUserInput("Enter Age: ");
        userAge = new Integer(userInput);
    }

    public int getUserAge(){
        return userAge;
    }

    public void printUserAge(int age){
        System.out.print("\nYou're " + age + " years of age.");
    }
}

public class AppUtils {
    public static String promptUserInput(String message) {
        Scanner input = new Scanner(System.in); 
        System.out.println(message);
        String userInput = input.next();
        return userInput;
    }
}

答案 1 :(得分:1)

您可以将用户输入存储在类成员变量中,稍后再重复使用。

import java.util.Scanner;

public class MyClass {
    private int age = -1;

    public static void main(String[] args) {
        MyClass o = new MyClass();
        o.getAge();
        System.out.print("\nYou're " + o.getAge() + " years of age.");
    }

    public int getAge() { 
        if (age == -1) {
            Scanner input = new Scanner(System.in);
            System.out.print("Enter Age: ");
            age = input.nextInt();
        }
        return age;
    }
}

答案 2 :(得分:1)

您的问题是,每次拨打getAge()时,都会创建一个新扫描程序,并尝试再次输入。相反,当您第一次从getAge()返回数字时,请将值保存在可以重复使用的变量中。

这样的事情:

int age = getAge();
System.out.print("your age is " + age + " years of age");