2015-06-14 47 views
2

例如,如果我輸入inRange(1,6),那麼它必須爲以下數組打印{2,2,2,3,5}。我不確定我的邏輯是否正確。有一個更好的方法嗎?我也不確定如何構建我的return語句。我想在不使用數組列表或數組的情況下執行此操作。如何在數組範圍內找到一個數字

public class AgeCount { 
    static int[] a=new int[]{1,2,45,6,3,2,1,2,5,6,65,45,43,21,34,34}; 

    public AgeCount(){ 

    } 
    public static int inRange(int b,int e) 
    { 
     int store[]=new int[a.length]; 
     int count=0; 
     for (int i = 0; i < a.length; i++) { 
       if(a[i]>b && a[i]<e) 
      { 
        return a[i]; 
      } 

     } 
     return 0; 
} 
+0

從你的例子看來,你想包括等於範圍開始的項目,但排除等於結束的項目。但是,您的代碼將接受等於結束的數字,因此與示例不一致。請澄清。此外,您當前的代碼將返回一個單一的數字,並不會打印任何內容。你想打印所有的值,返回所有的值,還是其他的東西?輸入數組是否可以改變? –

+0

對不起我的錯誤....我編輯了它 – STRANGER

+0

這仍然不清楚。回報值應該是什麼意思?輸出在哪裏完成?原始數組可以修改嗎? –

回答

0

如果你的方法只需要打印出給定範圍內的數字,它沒有返回任何東西:

public static void inRange(int b,int e) 
{ 
    int count=0; 
    System.out.print('{'); 
    boolean first = true; 
    for (int i = 0; i < a.length; i++) { 
     if(a[i]>=b && a[i]<=e) 
     { 
      if (!first) { 
       System.out.print(','); 
      } else { 
       first = false; 
      } 
      System.out.print(a[i]); 
     } 

    } 
    System.out.print('}'); 
} 

這是假設的輸出順序並不重要。如果確實如此,請在循環之前對輸入數組進行排序。

+0

TNX但我試圖使它不改變的返回類型爲int INRANGE(INT B,INT E)。你能給我一個關於如何去做的提示嗎? – STRANGER

+0

@STRANGER你應該返回什麼樣的價值? – Eran

+0

返回在該範圍內發現的數字 – STRANGER

0

好開始爲止!即使你說你不想使用array或ArrayList,但在這裏最有意義的是使用它。我會使用IntegersArrayList而不是一個數組,因爲我們還不知道長度。而不是說return a[i];,你會說store.append(a[i]);。我沒有測試此代碼,所以有可能是一個錯誤或兩個,所以請糾正我,如果我錯了,但這裏的固定的版本:

public class AgeCount { 
    static int[] a=new int[]{1,2,45,6,3,2,1,2,5,6,65,45,43,21,34,34}; 

    public AgeCount(){ 

    } 
    public static void inRange(int b,int e) 
    { 
     ArrayList<Integer> store = new ArrayList<Integer>(); 
     int count=0; 
     for (int i = 0; i < a.length; i++) { 
       if(a[i]>=b && a[i]<=e) 
      { 
        store.append(a[i]); 
      } 

     } 
     println(store); 
    } 
} 
+0

我敢肯定的ArrayList不能使用,因爲它很可能是一個家庭作業 – Burkely91

0

的Java 8做法:

int[] arr = new int[] {1,2,45,6,3,2,1,2,5,6,65,45,43,21,34,34}; 
int res[] = Arrays.stream(arr).filter(n -> n >= b && n <= e).toArray(); 
System.out.println(Arrays.toString(res)); 

我不知道你爲什麼不想使用數組或某種列表。如果出於家庭作業的目的,那麼如果您只想顯示結果,則不要從方法返回值,而是打印它。否則,您應該考慮使用List

+0

它與限制學生使用只返回一個類型過去一年參加考試指定 – STRANGER

0

Java8:

public static void main(String[] args) { 
    int[] arrayToFilter = new int[]{1, 2, 45, 6, 3, 2, 1, 2, 5, 6, 65, 45, 43, 21, 34, 34}; 

    int upperLimit = 5; 
    inRange(arrayToFilter, upperLimit); 
} 

private static void inRange(int[] arrayToFilter, int upperLimit) { 
    String sortedAndLimitedString = Arrays.stream(arrayToFilter) 
      .sorted() 
      .filter(value -> value < upperLimit) 
      .mapToObj(String::valueOf) 
      .collect(Collectors.joining(",", "{", "}")); 

    System.out.println(sortedAndLimitedString); 
} 

輸出: {1,1,2,2,2,3}

0

我認爲必須將結果排序。

public static int[] inRange(int b,int e) { 
     return IntStream.of(a) 
      .filter(n -> n > b && n < e) 
      .sorted() 
      .toArray(); 
    } 

    System.out.println(Arrays.toString(AgeCount.inRange(1, 6))); 
    // -> [2, 2, 2, 3, 5] 

```

+0

對不起,我與incosistent我的例子......我已經改變了,而且我對衆說紛紜寫只有int返回類型 – STRANGER

0

這聽起來像一個家庭作業的問題。還在這裏。

你的返回是一個int,它必須是類似122235的東西,它表示所有滿足你的範圍條件的整數。

因此,您使用BitSet類並設置在範圍內找到的位,您可以將其轉換爲像上面那樣的int並返回。

+0

對不起,我不清楚你想說 – STRANGER

+0

http://stackoverflow.com/questions/2473597/功能位集合到和來自整數長 – satks

0

這是簡單的&最短的解決方案。

import java.util.*; 

public class AgeCount 
{ 
    static int[] a=new int[]{1,2,45,6,3,2,1,2,5,6,65,45,43,21,34,34}; 

    public AgeCount() 
    { 
    } 
    public static void inRange(int b,int e) 
    { 
     int store[]=new int[a.length]; 
     Arrays.sort(a); 
     for (int i = b; i < e; i++) 
     { 
      System.out.print(a[i+1]+","); 
     } 
    } 
} 

這就是你如何返回一個值。

//sort an array, get a defined index values, and print it on the screen. 

import java.util.*; 

public class AgeCount 
{ 
    static int[] a=new int[]{1,2,45,6,3,2,1,2,5,6,65,45,43,21,34,34}; 

    public AgeCount() 
    { 
    } 
     public static int[] inRange(int b,int e) 
    { 
     int store[]=new int[a.length]; 
     int[] myRange = new int[e-b]; 

     Arrays.sort(a); 

     for (int i = b; i < e; i++) 
     { 
      for (int j = 0; j < (e-b); j++) 
      { 
       myRange[j] = a[i+1]; 
      } 
      System.out.print(a[i+1]+","); 
     } 
     return myRange; 
    } 
} 
0

首先,首先,你似乎沒有完全清楚你正在做什麼。沒關係!如果我們不確定應該發生什麼,有時候一個問題可能會變得難以理解和混亂。

我推薦當你開始一項新任務時,你需要一段時間分解的任務。拿一張紙試試把它分解成最小和最簡單的部分,然後從那裏進行編碼和測試。 SDLC的基礎知識(嘗試使用Google搜索軟件開發生命週期)可以在這裏幫助您 - 這一切都是要弄清楚您想要實現的目標以及爲實現目標需要實施的各種事情。

而且請不要驚慌失措,拋出你不明白的代碼!你只會陷入更深的困惑!

相關問題