如何在数组范围内查找数字

时间:2015-06-14 07:01:40

标签: java range

例如,如果我输入inRange(1,6),则必须为以下数组打印{2,2,2,3,5}。我不确定我的逻辑是否正确。有一个更好的方法吗?我也不确定如何构造我的return语句。我想这样做而不使用arraylist或数组。

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;
}   

8 个答案:

答案 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('}');
}   

这假设输出的顺序并不重要。如果确实重要,请在循环之前对输入数组进行排序。

答案 1 :(得分:0)

到目前为止开始不错!即使你说你不想使用数组或ArrayList,但在这里使用它最有意义。我会使用ArrayList Integers而不只是数组,因为我们还不知道长度。你会说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);
    }
}

答案 2 :(得分: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

答案 3 :(得分: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}

答案 4 :(得分: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]

```

答案 5 :(得分:0)

这听起来像是一个家庭作业问题。还在这里。

你的回报是单个int,它必须是122235,代表满足你的范围条件的所有int。

所以你使用BitSet类并设置在范围内找到的位,你可以转换为上面的int并返回。

答案 6 :(得分:0)

这是简单的&amp;最短的解决方案。

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;
    }   
}

答案 7 :(得分:0)

首先,看起来你似乎并不完全清楚自己想要做什么。那没关系!如果我们不确定应该发生什么,有时问题似乎会让人感到压力和困惑。

我建议您在开始新任务时花些时间 分解 该任务。拿一张纸,尝试将其分解成最小和最简单的部分,然后从那里开始,一点一点地编码和测试。 SDLC的基础知识(尝试谷歌搜索软件开发生命周期)也可以帮助你 - 这一切都是关于弄清楚你想要实现什么,以及你需要实现的各种事情。

请不要惊慌失措,抛出你不理解的代码!你只会陷入混乱的深处!