我正在尝试使用一种方法来打印另一种方法

时间:2018-10-01 14:00:45

标签: java methods

public static void main(String[] args) {
    System.out.println("Hello and welcome! Please enter the following: ");

    String q = null, s = "nul";
    userName(q);
    userGender(s);

    print(userName(q));
    print(userGender(s)); // how to achieve something like this?
}

public static void userName(String x) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter name: ");
    String n = sc.nextLine();
}

public static void userGender(String y) {
    Scanner sd = new Scanner(System.in);
    System.out.print("Enter Gender: ");
    String v = sd.next().toString();
}

public static void print(String a) {
    System.out.println(a);
}

因此,我试图做到这一点,以便在执行完一个方法后将其用于打印另一个方法,但我无法获得所需的结果,并且出现了错误。

3 个答案:

答案 0 :(得分:1)

print方法可以正常工作,它需要一个String并且不返回任何内容

public static void print(String a)
{
    System.out.println(a);

}

但是,您的方法userGender和userName不返回任何内容,因此,当您使用不返回字符串的方法提供打印内容时,它将产生编译时错误。您想做类似的事情:

public static String  userGender(String y){
     Scanner sd = new Scanner(System.in); 
     System.out.print("Enter Gender: ");
     return sd.next().toString(); 
}

由于您的逻辑尚不清楚,因此我尚未进行测试,但这可能就是您的IDE抱怨的原因。

答案 1 :(得分:0)

您的方法需要返回一些内容。您正在这样声明您的方法:public static void userGender(String y) void意味着您的方法将不返回任何内容。但是,由于您希望该方法返回一个String,因此需要在方法签名中加以说明。

您的代码可能如下所示:

 public static void main(String[] args) {
    System.out.println("Hello and welcome! Please enter the following: ");
    print(userName());
    print(userGender()); 
  }

  public static String userName() {
    try(Scanner sc = new Scanner(System.in)){ // this is try resource see which will close your resource once you are done in the try block see https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
      System.out.print("Enter name: ");
      return sc.next();
    }
  }

  public static String userGender() {
    try(Scanner sc = new Scanner(System.in)) {
      System.out.print("Enter Gender: ");
      return sc.next();
    }
  }

  public static void print(String a) {
    System.out.println(a);
  }

您不需要使用toString(),因为下一个已返回String。您也可以在不同的方法中使用相同的变量名称。而且非常重要,您需要再次关闭扫描仪,否则它将消耗无穷的资源。

答案 2 :(得分:0)

就像@reebow和@Kerry Gougeon都指出,您的方法正在寻找返回值,以便将其设为public static String userName()public static String userName(String s)

如果要使用Scanner,则必须全局声明Scanner,否则它将抛出NoSuchElementExcpetion

static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
    System.out.println("Hello and welcome! Please enter the following: ");
    print(userName());
    print(userGender()); 
}

public static String userName() {
    System.out.print("Enter name: ");
    return sc.next();
}

public static String userGender() {
    System.out.print("Enter Gender: ");
    return sc.next();
}

public static void print(String a) {
    System.out.println(a);
}

如果您不使用Scanner,则只需返回传递给该方法的String

public static void main(String[] args) {
      System.out.println("Hello and welcome! Please enter the following: ");
      String a = null, b ="nul";
      print(userName(a));
      print(userGender(b)); 
  }

  public static String userName(String a) {
      System.out.print("Enter name: ");
      return a;
  }

  public static String userGender(String b) {
      System.out.print("Enter Gender: ");
      return b;
  }

  public static void print(String a) {
      System.out.println(a);
  }