2015-10-10 105 views
-1

代碼很好,但是當我需要從函數中取出變量並將它們放入public static void時,它表示找不到該變量。任何人都知道如何解決這個問題?Java無法返回變量

import java.util.*; 

public class Greetings { 
    public static void main(String[] args) { 
     System.out.println("Greetings, " + String(s) + ". " + 
      String(j) +"!" + " You are about " + int(z) + " years old"); 
    } 
    public static String fNameGenerator(String s){ 
     Scanner scan1 = new Scanner(System.in); 
     System.out.println("Please enter your first name: "); 
     String first = scan1.next(); 
     s = first.substring(0,1).toUpperCase(); 
     return s; 
    } 
    public static String LastName(String j){ 
      Scanner scan2 = new Scanner(System.in); 
      System.out.println("Please enter you last name: "); 
      String second = scan2.next(); 
      int x = second.length(); 
      String y = second.substring(0, x).toLowerCase(); 
      j = y.substring(0,1).toUpperCase(); 
      return j; 
    } 
    public static int age(int z){ 
     Scanner scan3 = new Scanner(System.in); 
     System.out.println("Please enter your year of birth: "); 
      int third = scan3.nextInt();   
      z = (2015 - third); 
      return z; 
    } 
} 
+0

你想做什麼?根據定義,'void'方法(例如'main()')不能「返回」任何東西。 –

+0

查看[從方法返回值](https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html)。基本上你需要在'main()'中聲明局部變量,從其他方法中刪除輸入參數(因爲它們是冗餘的),然後使用'System.out(..)'中的變量。例如:'String fName = fNameGenerator();''public static String fNameGenerator(){/*...*/ return y.substring(0,1).toUpperCase();}''System.out.println(「問候,「+ fName /*...*/);'。 –

+0

更好的源代碼格式。 – Chuck

回答

0

您沒有調用任何的方法獲取輸入,所以你希望他們怎麼回事情?

兩件事情要記住:

  1. 只是因爲你在方法的末尾寫道:return s,這並不意味着你可以訪問此方法的s之外。在java中有一些稱爲scopes的東西,這意味着一個變量只存在於它定義的範圍內 - 在你的情況下 - 在這些方法中。如果你希望它在外面存在 - 取回返值並對它做些什麼。

  2. 聲明方法什麼也不做,直到你真正給他們打電話

所以爲了訪問這些變量,你需要做的是這樣的:

public static void main(String[] args) { 
    String s = fNameGenerator(); 
    String j = LastName(); 
    int z = age(); 
    System.out.println("Greetings, " + s + ". " + j +"!" +" You are about " + z + " years old"); 
} 

一件事,你可以看到我在那裏 - 你不需要傳遞任何東西給你的方法,因爲在重新設置它們之前,你沒有對給定的值做任何事情。只要確保你在裏面聲明瞭字段。例如你的年齡方法應該看起來像:

public static int age(){ 
    Scanner scan3 = new Scanner(System.in); 
    System.out.println("Please enter your year of birth: "); 
     int third = scan3.nextInt();   
     int z = (2015 - third); 
     return z; 
} 
0

。在你的代碼編譯錯誤

System.out.println("Greetings, " + String(s) + ". " + String(j) +"!" +" You are about " + int(z) + " years old"); 

如果你想調用的方法然後更換

String(s) --> fNameGenerator(s) 
String(j) --> LastName(j) 
int(z) --> age(z) 

具有S,J,Z爲本地變量或靜態成員。

或刪除參數傳遞給方法,你從掃描儀