给数组除去0放到新的数组中

本文介绍了一个简单的Java程序,用于遍历数组,统计零元素数量,并创建一个新数组只包含非零元素,最后打印新数组。程序通过循环遍历原数组,跳过零元素,将非零元素添加到新数组中。
import java.util.*;


public class Numbers{

public  static void main(String args[]){
    int oldArr[]={1,2,3,4,5,6,7,8,0,0,7,0,7};
    int count=0;
    for(int i=0;i<oldArr.length;i++){
    if(oldArr[i]==0){
    count+=1;
    }
    }
    int newArr[]=new int[oldArr.length-count];
    int j=0;
    for( int i=0;i<oldArr.length;i++){
    if(oldArr[i]!=0){
    newArr[j++]=oldArr[i];
   
    }
   

   
    }
    for(j=0;j<newArr.length;j++){
    System.out.println(newArr[j]);
    }
  // System.out.println(Arrays.toString(newArr));均可以上两种输出方法
    }
}
   

   
   
   
    
    
    
    





<think>由于用户的问题是关于C#中将一维数组内容放入交错数组(交叉数组)的方法,我将根据提供的引用和C#知识进行解答。 引用[3]提到交错数组(锯齿数组)是数组数组,每个内部数组长度可以不同。 用户需求:将一维数组的内容放入交错数组中。这需要明确如何分配一维数组的元素到交错数组的各个子数组。 假设我们有一个一维数组,需要将其分割成多个部分,然后放入交错数组的各个子数组中。例如,我们可以按照固定长度分割,或者按照特定规则分配。 步骤: 1. 创建交错数组(即数组数组)。 2. 确定如何分割一维数组,例如每个子数组包含几个元素(可以等长,也可以不等长)。 3. 将一维数组的元素分配到交错数组的各个子数组中。 示例:将一维数组分割成每3个元素一组(最后一组可能不足3个)放入交错数组。 代码示例: 假设有一个一维数组:int[] oneDArray = {1,2,3,4,5,6,7,8,9,10}; 我们要将它放入一个交错数组中,其中每个子数组有3个元素(最后一个子数组可能有1个或2个)。 我们可以这样实现: 1. 首先计算需要多少个子数组:子数组个数 = (一维数组长度 + 每组元素个数 - 1) / 每组元素个数 2. 初始化交错数组,长度为子数组个数。 3. 循环遍历每个子数组,为每个子数组分配内存(长度为每组元素个数,最后一个可能不同)。 4. 将一维数组的相应元素复制到每个子数组。 另一种情况:如果用户希望自定义每个子数组的长度,那么需要提供一个长度数组,然后根据长度数组来分配。 下面给出两种方法的示例代码: 方法1:按固定长度分组(假设每组3个) 方法2:按自定义长度数组分配(需要用户提供长度数组) 我们将分别编写这两种情况的代码。 注意:引用[2]中提到了交错数组的访问方式:使用两个方括号,如array[r][c]。 引用[3]提到交错数组数组数组,并且可以使用foreach循环遍历。 下面给出具体代码: </think>在 C# 中将一维数组内容放入**交错数组**(锯齿数组)的方法如下,关键点在于交错数组是**数组数组**,每个子数组长度可以不同: ### 方法 1:按固定分组长度转换 假设将一维数组每 N 个元素分到交错数组的子数组中: ```csharp int[] sourceArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int groupSize = 3; // 每组3个元素 // 计算子数组数量 int subArrayCount = (int)Math.Ceiling(sourceArray.Length / (double)groupSize); int[][] jaggedArray = new int[subArrayCount][]; // 分组填充 for (int i = 0; i < subArrayCount; i++) { int startIndex = i * groupSize; int length = Math.Min(groupSize, sourceArray.Length - startIndex); jaggedArray[i] = new int[length]; Array.Copy(sourceArray, startIndex, jaggedArray[i], 0, length); } /* 结果: jaggedArray[0] = {1,2,3} jaggedArray[1] = {4,5,6} jaggedArray[2] = {7,8,9} */ ``` ### 方法 2:自定义子数组长度分配 根据自定义规则分配(示例中使用子数组长度递增): ```csharp int[] sourceArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[][] jaggedArray = new int[3][]; // 创建3个子数组 // 设定不同长度的子数组 jaggedArray[0] = new int[2]; // 第1个子数组长度=2 jaggedArray[1] = new int[3]; // 第2个子数组长度=3 jaggedArray[2] = new int[5]; // 第3个子数组长度=5 int srcIndex = 0; for (int i = 0; i < jaggedArray.Length; i++) { for (int j = 0; j < jaggedArray[i].Length; j++) { if (srcIndex < sourceArray.Length) jaggedArray[i][j] = sourceArray[srcIndex++]; } } /* 结果: jaggedArray[0] = {1,2} jaggedArray[1] = {3,4,5} jaggedArray[2] = {6,7,8,9,10} */ ``` ### 关键说明 1. **交错数组本质** 每个元素都是独立数组对象(引用类型),需单独实例化子数组[^3]: ```csharp int[][] jagged = new int[3][]; // 创建顶层数组 jagged[0] = new int[4]; // 实例化第一个子数组 ``` 2. **内存特性** - 子数组在堆中独立存储 - 交错数组元素存储子数组的引用地址(非连续内存)[^3] 3. **遍历建议** 使用嵌套循环访问(引用[2]示例): ```csharp for (int r = 0; r < jaggedArray.Length; r++) { for (int c = 0; c < jaggedArray[r].Length; c++) { Console.Write(jaggedArray[r][c] + " "); } } ``` > ⚠️ 注意:需确保子数组总长度不超过一维数组长度,否则会引发 `IndexOutOfRangeException`。 --- ### 相关问题 1. 如何在 C# 中动态调整交错数组的子数组长度? 2. 交错数组与二维矩形数组在内存分配上有何本质区别[^3]? 3. 使用 `Array.Copy` 和直接赋值在性能上有何差异? 4. 当一维数组元素类型为引用类型时,放入交错数组需要注意什么? [^1]: 引用内容涉及 C# 数组基础操作 [^2]: 展示交错数组遍历的标准结构 [^3]: 说明数组内存分配机制和引用类型特性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值