Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java For类似循环的Python范围函数_Java_Python_Function_For Loop - Fatal编程技术网

Java For类似循环的Python范围函数

Java For类似循环的Python范围函数,java,python,function,for-loop,Java,Python,Function,For Loop,我想知道Java中是否有类似python range函数的函数 range(4) 它会回来的 [0,1,2,3] 这是一种实现增强循环的简单方法。在Java中这样做会很好,因为这将使for循环变得更容易。这可能吗?嗯用于(int i=0;i

我想知道Java中是否有类似python range函数的函数

range(4)
它会回来的

[0,1,2,3]
这是一种实现增强循环的简单方法。在Java中这样做会很好,因为这将使for循环变得更容易。这可能吗?

嗯<代码>用于(int i=0;i?你不必整天编写增强的for循环,你知道,尽管它们很酷

为了便于讨论:

for(int i:range(k))
char count:22

for(int i=0;i
char count:27


不考虑
范围
的实现,它是伪偶数。

没有Java等价于
范围
函数,但有一个:

如果你真的很喜欢语法,你也可以使用你自己的
范围
函数,但这似乎有点傻

public static int[] range(int length) {
    int[] r = new int[length];
    for (int i = 0; i < length; i++) {
        r[i] = i;
    }
    return r;
}

// ...

String s;
for (int i : range(arrayOfStrings.length)) {
    s = arrayOfStrings[i];
    // Do stuff
}
公共静态int[]范围(int长度){
int[]r=新的int[长度];
for(int i=0;i
如果您真的非常想在Java中获得同等的结果,您必须做更多的工作:

public int[] range(int start, int end, int step) {
    int n = (int) Math.ceil((end-start)/(double)step);
    int[] arange = new int[n];
    for (int i = 0; i < n; i++)
        arange[i] = i*step+start;
    return arange;
}
public int[]范围(int开始、int结束、int步){
int n=(int)Math.ceil((结束-开始)/(双)步);
int[]arange=新的int[n];
对于(int i=0;i

现在
范围(0,4,1)
将返回预期值,就像Python一样:
[0,1,2,3]
。遗憾的是,Java中没有一种更简单的方法,它不像Python那样是一种非常有表现力的语言。

事实并非如此。但是,您可以创建一个静态方法并使用它-

public static int[] range(int index){
    int[] arr = new int[index];
    for(int i=0;i<index;i++){
        arr[i]=i;
    }
    return arr;
}
公共静态int[]范围(int索引){
int[]arr=新的int[索引];
对于(int i=0;i使用:

我通常不会提倡为如此简单的东西引入外部库,但Apache Commons的使用如此广泛,以至于您的项目中可能已经有了它

编辑:我知道它不一定像for循环那样简单或快速,但它是一个很好的语法糖分,可以让意图变得清晰


编辑:请参阅@zengr在Java 8中使用的
IntStream

据我所知,Java中没有等效函数。但您可以自己编写:

public static int[] range(int n) {
    int[] ans = new int[n];
    int i;
    for(i = 0; i < n; i++) {
        ans[i] = i;
    }
    return ans;
}
公共静态int[]范围(int n){
int[]ans=新的int[n];
int i;
对于(i=0;i
如果没有外部库,您可以执行以下操作。与当前接受的答案相比,对于大范围,它将消耗更少的内存,因为没有创建数组

有这样一节课:

class Range implements Iterable<Integer> {

    private int limit;

    public Range(int limit) {
        this.limit = limit;
    }

    @Override
    public Iterator<Integer> iterator() {
        final int max = limit;
        return new Iterator<Integer>() {

            private int current = 0;

            @Override
            public boolean hasNext() {
                return current < max;
            }

            @Override
            public Integer next() {
                if (hasNext()) {
                    return current++;   
                } else {
                    throw new NoSuchElementException("Range reached the end");
                }
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Can't remove values from a Range");
            }
        };
    }
}
    for (int i : new Range(5)) {
        System.out.println(i);
    }
您甚至可以重复使用它:

    Range range5 = new Range(5);

    for (int i : range5) {
        System.out.println(i);
    }
    for (int i : range5) {
        System.out.println(i);
    }

正如下面的评论所指出的,我们可以将以下方法添加到
范围
类(或其他任何地方):

然后,在其他课程中,我们可以

import static package.name.Range.range;
只要打个电话

for (int i : range(5)) {
    System.out.println(i);
}
Java8(2014)添加了(类似于ApacheCommons IntRange),所以现在不需要外部lib

import java.util.stream.IntStream;
IntStream.range(0,3).forEachOrdered(n->{
系统输出println(n);
});
如果顺序不重要,也可以使用
forEach
代替
forEachOrdered


IntStream.range(0,3).parallel()
可以用于并行运行的循环

在java中用python替换range的方法可以用以下代码来完成。注意:我不是在编写代码,我只是编写一小段代码并向您展示

在python中,您可以

if -2 <= x <= 10:
     print(x) 


if-2你试过自己写吗?这并不难,在这个问题上也有一些很好的解决方案:对于一系列的
可比的
s,请看answerWell,这是正常的方法,但是如果你能制作一个数组供循环使用,会简单得多。不过,这不是他要问的;他想知道是否有“更简单”的方法。@HenryKeiter:没错,只是想反驳OP的观点:“在java中这样做很好,因为它会使循环变得更简单”。好吧,我当然不能不同意你的观点。似乎只是为了节省几个字符(并且忽略所有的约定)付出了很多努力,但我不是来判断人们可能想用什么(反)习语:)@如果你看我的答案,你可以让一些东西像数组一样思考,只是效率更高;)这不是,但我希望它是,它仍然知道这也会比传统的for循环慢很多。这个解决方案效率很低-你需要一个大数组来实现大范围。这是我能想到的最简单有效的解决方案nk of.这将创建一个巨大的数组,如果你想要一个范围到
Integer.MAX_VALUE
;)你可以检查你的可用主内存,甚至你可以添加更多的内存。呵呵:p这个实现有一些缺陷。运行
int[]range=range(5,33,5);System.out.println(Arrays.toString(range))
这将创建一个巨大的数组,如果你想要一个范围到
Integer.MAX_VALUE
;)@jlordo这当然是正确的;-)但是Python(2)中的
范围
函数也是如此,我觉得编写迭代器只是为了避免编写一个基本循环,太过了(+1是你的答案,lol)。对于一个简单的循环来说,肯定是矫枉过正了。虽然你可以修改迭代器以使用Python
range()
方法所具有的所有其他选项,但使用的内存要少得多;)感谢+1,它将创建一个巨大的数组,如果您想要一个到
Integer.MAX_VALUE
;)@jlordo的范围,如果您将它推到该范围,是的,它将…python的
范围()
function这就是我喜欢Java的原因,因为在不使用太多内存的情况下很容易获得该功能:)+1用于为此编写迭代器!有趣的是:您可以进一步包装它
import static package.name.Range.range;
for (int i : range(5)) {
    System.out.println(i);
}
if -2 <= x <= 10:
     print(x) 
if(x >= -2 && x <= 10){
System.out.println("x")
}