2015-04-07 134 views
0
/* 
* One common programming activity is to find the minimum and maximum values 
* within a list. In this challenge activity we will do just that. It will also 
* demonstrate how arrays and for loops compliment each other nicely. 
* 
* First, execute the main() method as is so you can understand how the for loop 
* works with the array. If you must, set a breakpoint and step through the code. 
* 
* Notice the min and max values are not correct. That's where you come in your 
* job is to write these methods. Regardless of min or max, your approach should 
* be the same: (Here's the pseudocode for min) 
* 
* set min to the value of the first element in the array 
* for each element in the array 
* if the current element is less than min 
*  set min to the current element 
* end for 
* return min 
*/ 
package minandmax; 

import java.util.Scanner; 

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

     // Read inputs into the array 
     System.out.println("Enter 10 Integers."); 
     for (int i = 0; i < array.length; i++) { 
      System.out.printf("Enter Integer %d ==>", i + 1); 
      array[i] = input.nextInt(); 
     } 
     // Print out the array 
     System.out.print("You Entered :"); 
     for (int i = 0; i < array.length; i++) { 
      System.out.printf("%d ", array[i]); 
     } 
     System.out.println(); 
     // find the min/max and print 
     System.out.printf("Min = %d\n", getMin(array)); 
     System.out.printf("Max = %d\n", getMax(array)); 

    } 

    /** 
    * returns the smallest value in the array 
    * @param array array of integer 
    * @return integer representing the smallest 
    */ 
    public static int getMin(int[] array) { 
     //TODO: write code here 
     int min = array[0]; 

     for (int a: array) { 
      if (a < min) { 
       min = a; 
      } else { 
       break; 
      } 

     } 
     return min; 
    } 

    /** 
    * returns the largest value in the array 
    * @param array array of integer 
    * @return integer representing the largest 
    */ 
    public static int getMax(int[] array) { 
     //TODO: write code here 
     int max = array[0]; 
     for (int a: array) { 
      { 
       if (a > max) { 
        max = a; 
        return max; 
       } 

我不斷收到缺少return語句,達到文件的末尾,而解析,但是我已經有我return語句和我的代碼正確關閉支架。請幫幫忙,謝謝「缺少return語句」,但我已經有return語句

+4

你有*所有*代碼路徑的返回語句嗎? – hexafraction

+6

發佈的代碼在方法中間切斷。 –

+2

'「...並且我的代碼正確地關閉了括號。」 - 不是您發佈的代碼。嘗試發佈代碼的其餘部分,並指出錯誤發生在哪一行。 – azurefrog

回答

3

在你getMax方法,你得到的錯誤,因爲return max不可達如果(a <=max)

+0

換句話說,如果getMax方法沒有在for循環中返回,那麼是否在getMax方法結尾處有return語句。即使你「知道」它會觸及它,但編譯器並不知道這一點。如果for中的條件不滿足,它必須返回一些內容。 – JustinKSU

0

看着getMax,你有兩個開放的花括號

public static int getMax(int[] array) { 
    //TODO: write code here 
    int max = array[0]; 
    for(int a : array) 
    { 
     { <===== HERE 
      if (a > max) 
      { 

在一個側面說明,只要你遇到一個大於max的數字,就不應該返回max,你應該等到你看完所有的數字。

0

getMax()方法a不大於max時會發生什麼?你在合約中指定它會返回一個int,在這種情況下它不會返回任何東西。考慮將你的回報這樣的循環之外:

import java.util.Scanner; 
public class MinAndMax { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int[] array = new int[10]; 

     // Read inputs into the array 
     System.out.println("Enter 10 Integers."); 
     for(int i=0;i<array.length;i++) { 
      System.out.printf("Enter Integer %d ==>",i+1); 
      array[i] = input.nextInt(); 
     } 
     // Print out the array 
     System.out.print("You Entered :"); 
     for(int i=0;i<array.length;i++) { 
      System.out.printf("%d ", array[i]); 
     } 
     System.out.println(); 
     // find the min/max and print 
     System.out.printf("Min = %d\n",getMin(array)); 
     System.out.printf("Max = %d\n",getMax(array)); 

    } 

    /** 
    * returns the smallest value in the array 
    * @param array array of integer 
    * @return integer representing the smallest 
    */ 
    public static int getMin(int[] array) { 
     int min = array[0]; 
     for(int a : array) { 
      if (a < min) { 
       min = a; 
      } 
     } 
     return min; 
    } 

    /** 
    * returns the largest value in the array 
    * @param array array of integer 
    * @return integer representing the largest 
    */ 
    public static int getMax(int[] array) { 
     //TODO: write code here 
     int max = array[0]; 
     for(int a : array) { 
      if (a > max) { 
       max = a; 
      } 
     } 
     return max; 
    } 
} 
0

如果if條件是一點都沒錯,或者,如果控制從來沒有進入for循環,則該方法getMax()將不會返回任何東西。但是根據方法定義,它應該返回一個整數。而且沒有適當的關閉/開放的支架很少。

試試這個

​​
0

試想一下你的代碼是真的在做您的2種查找方法。 你永遠不會以你實現這個的方式測試你的數組中的所有int值。

只需使用簡單的if(最小< a)或if(max> a)測試您的值,並且只在for()循環之後返回,而不在循環中。