Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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循环来复制数组?_Java_Foreach_Copy - Fatal编程技术网

Java 有没有一种方法可以使用增强的for循环来复制数组?

Java 有没有一种方法可以使用增强的for循环来复制数组?,java,foreach,copy,Java,Foreach,Copy,我刚开始使用增强for循环。我想知道是否可以使用此循环复制数组。我想遍历某个数组的每个元素,并将其复制到一个新的数组中。使用增强的for循环来实例化我的新数组(而不是典型的for循环)也很好。在我当前的实现中,我确实知道我希望阵列有多大,但为了将来的参考,我想知道我是否可以做到这一点,如果可以,如何做到 我的具体计划可能有助于回答我的问题。我所做的是从文本文件中检索一行文本,然后对该字符串调用split(“,”),这将返回一个字符串数组。我想将此数组存储在内存中,以便以后可以使用它 我理解增强f

我刚开始使用增强for循环。我想知道是否可以使用此循环复制数组。我想遍历某个数组的每个元素,并将其复制到一个新的数组中。使用增强的for循环来实例化我的新数组(而不是典型的for循环)也很好。在我当前的实现中,我确实知道我希望阵列有多大,但为了将来的参考,我想知道我是否可以做到这一点,如果可以,如何做到

我的具体计划可能有助于回答我的问题。我所做的是从文本文件中检索一行文本,然后对该字符串调用split(“,”),这将返回一个字符串数组。我想将此数组存储在内存中,以便以后可以使用它

我理解增强for循环工作的方式是,第一个值被分配到数组中的当前位置,第二个值是要遍历的数组


我想知道除了(初始化;终止;迭代)和(对象o:list[])之外,for循环是否还有其他格式。

据我所知,对于(init;终止;迭代)循环和(类型o:iterable)循环只有标准的

首先,提前知道尺寸不应该是一个问题。要实例化新数组,请使用原始数组的.length字段:
newstring[original.length]如下所示

接下来,对于您正在做的事情,循环的标准是合适的,原因有两个:

  • 为了迭代这两个循环,需要为每个循环嵌套两个循环 循环,使其比循环的标准更麻烦。(或添加外部定义的计数器,如blalasaadri的解决方案)
  • 更重要的是,对于基本数据类型或字符串,在for each循环中
    之前声明的变量表示每个后续元素的值,而不是对实际元素的引用。因此,一旦循环迭代,对变量的任何更改都将消失。我不确定这是否适用于“普通”对象(即:不是字符串),因为我还没有尝试过,尽管我现在想知道

    举例说明:

    String[] sArr = {"foobar"};
    for(String s : sArr){
        s = "openbar";
    }
    
    相当于:

    String[] sArr = {"foobar"};
    String s = sArr[0];
    s = "openbar";
    
    不幸的是,对于sArr[0],没有开放的酒吧,同样的老酒吧

  • 至于解决方案,如果你能
    导入java.util.array然后尝试:

    String[] copyStrings = Arrays.copyOf(arrStrings, arrStrings.length);
    
    或者,如果您需要推出自己的:

    public String[] copyArray(String[] original){
        String[] dupe = new String[original.length]; //I assume you want equal length
        for(int i = 0; i < original.length; i++){
            dupe[i] = original[i]; //single iterator traverses both arrays
        }
        return dupe;
    }
    
    公共字符串[]copyArray(字符串[]原始){
    String[]dupe=new String[original.length];//我假设您想要相同的长度
    对于(int i=0;i
    据我所知,对于(init;termination;iteration)
    循环只有标准的
    ,对于(type o:iterable)
    循环,每个
    都有标准的

    首先,提前知道尺寸不应该是一个问题。要实例化新数组,请使用原始数组的.length字段:
    newstring[original.length]如下所示

    接下来,对于您正在做的事情,循环的标准是合适的,原因有两个:

  • 为了迭代这两个循环,需要为每个循环嵌套两个循环 循环,使其比循环的标准更麻烦。(或添加外部定义的计数器,如blalasaadri的解决方案)
  • 更重要的是,对于基本数据类型或字符串,在for each循环中
    之前声明的变量表示每个后续元素的值,而不是对实际元素的引用。因此,一旦循环迭代,对变量的任何更改都将消失。我不确定这是否适用于“普通”对象(即:不是字符串),因为我还没有尝试过,尽管我现在想知道

    举例说明:

    String[] sArr = {"foobar"};
    for(String s : sArr){
        s = "openbar";
    }
    
    相当于:

    String[] sArr = {"foobar"};
    String s = sArr[0];
    s = "openbar";
    
    不幸的是,对于sArr[0],没有开放的酒吧,同样的老酒吧

  • 至于解决方案,如果你能
    导入java.util.array然后尝试:

    String[] copyStrings = Arrays.copyOf(arrStrings, arrStrings.length);
    
    或者,如果您需要推出自己的:

    public String[] copyArray(String[] original){
        String[] dupe = new String[original.length]; //I assume you want equal length
        for(int i = 0; i < original.length; i++){
            dupe[i] = original[i]; //single iterator traverses both arrays
        }
        return dupe;
    }
    
    公共字符串[]copyArray(字符串[]原始){
    String[]dupe=new String[original.length];//我假设您想要相同的长度
    对于(int i=0;i
    如果要保留增强型for循环以复制阵列,则存在一个主要问题:增强型for循环没有计数器。但是,将元素插入数组需要一个计数器。因此,您当然可以手动执行此操作,如下所示:

    String[] array = {"A", "Bb", "c", "dD"};
    String[] newArray = new String[array.length];
    
    int i=0;
    for(String stuff : array) {
        newArray[i++] = stuff;
    }
    
    这是完全可能的,但实际上并不是增强for循环背后的想法

    更符合这一意图的是:

    String[] array = {"A", "Bb", "c", "dD"};
    List<String> list = new ArrayList<String>();
    
    for(String stuff : array) {
        list.add(stuff);
    }
    
    String[] newArray = new String[list.size()];
    list.toArray(newArray);
    
    String[]数组={“A”、“Bb”、“c”、“dD”};
    列表=新的ArrayList();
    for(字符串填充:数组){
    列表。添加(内容);
    }
    String[]newArray=新字符串[list.size()];
    列表。toArray(新数组);
    
    这样不仅可以遵循增强的for循环背后的思想,还可以允许
    array.length()!=newArray.length()
    (因为,比方说,您过滤了数组)


    编辑:从Java7开始,实际上只有您提到的两个for循环。这可能会在未来的版本中发生变化,尽管这似乎是明智的;毕竟,增强型for循环只在Java 5中添加(如图所示)。

    如果您想继续使用增强型for循环来复制数组,那么有一个主要问题:增强型for循环没有计数器。但是,将元素插入数组需要一个计数器。因此,您当然可以手动执行此操作,如下所示:

    String[] array = {"A", "Bb", "c", "dD"};
    String[] newArray = new String[array.length];
    
    int i=0;
    for(String stuff : array) {
        newArray[i++] = stuff;
    }
    
    这是完全可能的,但实际上并不是增强for循环背后的想法

    更符合这一意图的是:

    String[] array = {"A", "Bb", "c", "dD"};
    List<String> list = new ArrayList<String>();
    
    for(String stuff : array) {
        list.add(stuff);
    }
    
    String[] newArray = new String[list.size()];
    list.toArray(newArray);
    
    String[]数组={“A”、“Bb”、“c”、“dD”};
    列表=新的ArrayList();
    for(字符串填充:数组){
    列表。添加(内容);
    }
    String[]newArray=新字符串[list.size()];
    锂