2014-12-11 130 views
-3

我開始學習考試並用方法做一些練習程序,目前我的思維已經空白。我想知道如何初始化n1,n2,n3和n4。我將它們設置爲0,但返回語句只返回0。如何解決變量可能未被初始化的錯誤

public class LargestOfIntegers2 
{ 
    public static int findLargest(int n1, int n2, int n3, int n4) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter the first integer --> "); 
     n1 = scan.nextInt(); 
     System.out.print("Enter the second integer --> "); 
     n2 = scan.nextInt();  
     System.out.print("Enter the third integer --> "); 
     n3 = scan.nextInt();  
     System.out.print("Enter the fourth integer --> "); 
     n4 = scan.nextInt();  

     if(n1>n2 && n1 > n3 && n1 > n4) 
      return n1; 
     else if(n2 > n1 && n2 > n3 && n2 > n4) 
      return n2; 
     else if(n3>n1 && n3>n2 && n3>n4) 
      return n3; 
     else 
      return n4; 
    } 

    public static void main(String[] args) { 
     int n1, n2, n3, n4; 

     findLargest(n1, n2, n3, n4); 
     if(n1>n2 && n1 > n3 && n1 > n4) 
      System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n1); 
     else if(n2 > n1 && n2 > n3 && n2 > n4) 
      System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n2); 
     else if(n3>n1 && n3>n2 && n3>n4) 
      System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n3); 
     else 
      System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n4); 

    } 
} 
+0

如果您不使用'n1,..,n4'原始值,爲什麼您將它們作爲參數傳遞?它們不應該是局部變量嗎? – MondKin 2014-12-11 01:45:58

+0

'我將它們設置爲0' - 在哪裏?我沒有看到它...... – August 2014-12-11 01:46:50

+0

你似乎期待從方法中獲得所有四個值。但是Java不能這樣工作 - 它是「按值傳遞」,而不是「通過引用傳遞」。如果您需要從方法中獲取所有四個值,則一種選擇是返回一個數組。您可能希望有一種方法僅從用戶獲取值,另一種方法是計算出最大值的方法。 – 2014-12-11 01:46:58

回答

0

變量n1通過n4將在findLargest功能進行設置,但只有他們的本地副本,這些變化將永遠不會被「遙相呼應」回main功能。這是你的主要問題,因爲main中的變量沒有被設置。

你最好問一個函數中的每個變量並返回它,然後通過獲取返回值正確使用findLargest。這將大大類似:

import java.util.Scanner; 

public class Test { 
    public static int getNum(Scanner sc, String desc) { 
     System.out.print("Enter the " + desc + " integer --> "); 
     return sc.nextInt(); 
    } 

    public static int findLargest(int n1, int n2, int n3, int n4) { 
     if (n1 >= n2 && n1 >= n3 && n1 >= n4) 
      return n1; 
     if (n2 >= n3 && n2 >= n4) 
      return n2; 
     if (n3 >= n4) 
      return n3; 
     return n4; 
    } 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int a = getNum(scan, "first"); 
     int b = getNum(scan, "second"); 
     int c = getNum(scan, "third"); 
     int d = getNum(scan, "fourth"); 

     int x = findLargest(a, b, c, d); 
     System.out.println("max(" + a + "," + b + "," + c + "," + d + ") = " + x); 
    } 
} 

你可以看到,我也做了更改findLargest功能,最大限度的比較。例如,如果您通過第一個if聲明而不返回,則您知道n1與進一步比較無關,因爲它比至少一個其他值小。

+0

嘿,我不知道你是否會看到這個,但你的解釋幫助最大。 Idk發生了什麼事,但只是在我的頭部點擊了一下。再次感謝。 – 2014-12-11 03:48:18

0

的主要原因您的代碼不工作:

public static void main(String[] args) { 
    int n1, n2, n3, n4; 

    findLargest(n1, n2, n3, n4); <--- YOU DID NOT STORE THE RETURNED VALUE 
    if(n1>n2 && n1 > n3 && n1 > n4) 
     System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n1); 
    else if(n2 > n1 && n2 > n3 && n2 > n4) 
     System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n2); 
    else if(n3>n1 && n3>n2 && n3>n4) 
     System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n3); 
    else 
     System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n4); 

} 

執行下列任:

//prompt user input for n1, n2, n3, n4 first 
System.out.println(findLargest(n1,n2,n3,4)); 

OR

//prompt user input for n1, n2, n3, n4 first 
int largest = findLargest(n1,n2,n3,n4); 
System.ouot.println(largest); 

我相信這會使你的代碼工作。當然,在調用方法之前,您應該在方法之外提示它,而不是在方法中提示用戶輸入。


的Java方法如何傳遞它的值說明:

public static void main(String[] args) 
{ 
    int n = 100; 
    someMethod(n); 
    System.out.println(n); //n will still be 100; 
} 

public static void someMethod(int n1) 
{ 
    n1 = 999; 
} 

爲什麼n主仍然是100,而不是999。這是因爲Java經過有價值的東西。對於原始類型,傳遞的值是實際值本身。這意味着一個拷貝的實際值將被傳遞給該方法。複製了。 因此n1(範圍:someMethod)只是n(範圍:主要)的副本。 n1上的更改不會影響n


額外的東西給你:

如果您傳遞的4個變量n1, n2, n3, n4。爲什麼要求用戶在您的方法中再次輸入4個值?

這樣做會使從方法的調用者傳入的n1,n2,n3,n4的值「無效」。

順便說一下,有很多簡單的方法來實現這一點。由於不觸及數組,你可以簡單地這樣做:

public static int findLargest(int n1, int n2, int n3, int n4) 
{ 
    return Math.max(Math.max(n1,n2), Math.max(n3,n4)); 
} 
+0

添加更多我的解決方案... – user3437460 2014-12-11 01:52:26

+0

不,您仍然錯過了關鍵點。 'main'方法試圖使用這些變量而不用初始化它們,這就是編譯錯誤所說的。 – 2014-12-11 03:02:01

+0

@DavidWallace好吧,我編輯它。在調用方法之前,應提示用戶輸入所有4個值。 – user3437460 2014-12-11 03:18:00

0

這是你的代碼會做什麼: 這將讓新的N1和N2和N3和N4並將它們設置等於你通過

public static int findLargest(int n1, int n2, int n3, int n4){ 
{ 

你傳遞一個未初始化的值,這樣就不會被初始化 你再與用戶輸入(這不會改變任何東西超出這個方法,你的變量是本地的),那麼你會發現最大的,並將其返回 你的代碼沒有按初始化它們'隨身攜帶這項價值

int thelargest=findLargest(n1, n2, n3, n4); 

將其存儲

你再嘗試和比較UNINITIALIZED INTS爲findlargest不能看到N1 N2 N3 N4的方法,因爲沒有通通過REFFERENCE解決您的代碼做什麼,我想你想爲此

static int n1,n2,n3,n4; 
    public static void findLargest() 

{ 
Scanner scan = new Scanner(System.in); 
System.out.print("Enter the first integer --> "); 
n1 = scan.nextInt(); 
System.out.print("Enter the second integer --> "); 
n2 = scan.nextInt();  
System.out.print("Enter the third integer --> "); 
n3 = scan.nextInt();  
System.out.print("Enter the fourth integer --> "); 
n4 = scan.nextInt();  
//nothing is listening for these numbers anyway why bother with it 
// if(n1>n2 && n1 > n3 && n1 > n4) 
// return n1; 
// else if(n2 > n1 && n2 > n3 && n2 > n4) 
    // return n2; 
// else if(n3>n1 && n3>n2 && n3>n4) 
//  return n3; 
// else 
// return n4; 
} 

public static void main(String[] args) { 
//int n1, n2, n3, n4; 

findLargest(); 
if(n1>n2 && n1 > n3 && n1 > n4) 
    System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n1); 
else if(n2 > n1 && n2 > n3 && n2 > n4) 
    System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n2); 
else if(n3>n1 && n3>n2 && n3>n4) 
    System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4 + ", the largest integer is " + n3); 
else 
    System.out.println("Out of the numbers " + n1 + ", " + n2 + ", " + n3 + ", " + n4   + ", the largest integer is " + n4); 

} 

} 
+0

提示正在詢問方法頭:public static int findLargest(int n1,int n2,int n3,int n4) – 2014-12-11 02:04:02

+0

sry ill修復了固定的 – 2014-12-11 02:09:36