Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Main中创建的输入变量的值与在方法中创建的输入变量的值不同_Java - Fatal编程技术网

Java 在Main中创建的输入变量的值与在方法中创建的输入变量的值不同

Java 在Main中创建的输入变量的值与在方法中创建的输入变量的值不同,java,Java,我创建了一个从用户那里获取输入的方法。然而,我的问题是,当我试图返回方法的值时,它会不断地要求输入一个新的数字。相反,我希望它要求一次数字,然后返回它 例如:下面的代码说明了我想要在没有方法的情况下实现什么,但将其包含在方法中会带来困难: 主管道内的工作代码: public static void main(String[] args) { Scanner input = new Scanner(System.in); int age; System.out.pr

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

例如:下面的代码说明了我想要在没有方法的情况下实现什么,但将其包含在方法中会带来困难:

主管道内的工作代码:

 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());它每次都要一个数字。为什么第一个代码允许我打印年龄而不要求一个新号码,但是调用方法打印号码会导致问题并继续要求一个新号码


实际上,我只想调用该方法,请求输入一个号码一次,然后调用该方法返回用户输入的号码

您可以将用户输入存储在类成员变量中,并在以后重用它

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;
    }
}

您可以将用户输入存储在类成员变量中,并在以后重用它

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;
    }
}

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

大概是这样的:

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

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

大概是这样的:

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

这不仅仅是关于有代码来完成这项工作,还涉及到设计。我建议采用以下方法,其特点是:

  • 一个实用程序类和一个通用方法
    promptUserInput
    ,用于提示用户输入并传递消息
  • 它将返回一个字符串对象,并根据需要将其转换为其他对象
  • 如果您想从其他方法/类访问它,则将其存储为实例变量,否则只需将其用于打印或任何您的计划
一旦一切都完成,并且父线程准备就绪,您可以处理Scanner对象以关闭它,因为您需要进行一些更改

我的目的不是简单地提供代码块,而是让你思考如何设计。因此,您可能需要根据您的需求、场景和测试进行一些更改

代码:

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;
    }
}

这不仅仅是关于有代码来完成这项工作,还涉及到设计。我建议采用以下方法,其特点是:

  • 一个实用程序类和一个通用方法
    promptUserInput
    ,用于提示用户输入并传递消息
  • 它将返回一个字符串对象,并根据需要将其转换为其他对象
  • 如果您想从其他方法/类访问它,则将其存储为实例变量,否则只需将其用于打印或任何您的计划
一旦一切都完成,并且父线程准备就绪,您可以处理Scanner对象以关闭它,因为您需要进行一些更改

我的目的不是简单地提供代码块,而是让你思考如何设计。因此,您可能需要根据您的需求、场景和测试进行一些更改

代码:

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;
    }
}


如果您想返回用户输入,而不是再次询问用户,则需要将用户输入存储在变量中。您能举个例子吗?您有什么困难?@Baleroc在我这样做之前,我可以问一下您想要实现什么吗?例如,如果您希望创建一个
Person
类,例如使用
名称
年龄
,则有相同的方法来解决该问题,但如果您只希望使用一个方法,而不必连接到模型类,则还有其他方法可以实现。那么,你能解释一下你的目标是什么吗?以下是步骤:(1)要求用户输入年龄(2)调用getAge()方法允许用户输入年龄(3)一旦年龄有了输入,我希望能够调用该方法返回年龄的值。(4) 能够调用getAge()返回人的年龄值。如果希望返回用户输入,而不是再次询问用户,则需要将用户输入存储在一个变量中。您能举个例子吗?您有什么困难?@Baleroc在我这样做之前,我可以问一下您想要实现什么吗?例如,如果您希望创建一个
Person
类,例如使用
名称
年龄
,则有相同的方法来解决该问题,但如果您只希望使用一个方法,而不必连接到模型类,则还有其他方法可以实现。那么,你能解释一下你的目标是什么吗?以下是步骤:(1)要求用户输入年龄(2)调用getAge()方法允许用户输入年龄(3)一旦年龄有了输入,我希望能够调用该方法返回年龄的值。(4) 能够调用getAge()来返回人的年龄值。此外,OP的
getAge()
和您的
getAge()
之间没有区别,这是正确的。Number是我在getAge中添加的一个随机变量名,以防止混淆,但实际上它是同一个概念。我将感谢任何适用的投票。此外,OP的
getAge()
和您的
getAge()
之间没有区别,这是正确的。Number是我在getAge中添加的一个随机变量名,以防止混淆,但实际上它是同一个概念。我将感谢任何适用的投票。因为这段代码应该在程序员喜欢获得用户输入的任何地方使用:请自己尝试。。。调用你的方法两次,看看会发生什么。@hagrawal我不知道如何正确地应用它,原因如下:我想要一个方法打印出用户作为输入输入输入的数字。我