【问题标题】:Dividing array into two different arrays将数组分成两个不同的数组
【发布时间】:2014-04-18 12:03:17
【问题描述】:

我已经制作了二维数组来存储模式[用户定义]及其特征[用户可以决定每个模式的特征数]。我必须将此结构分为两部分 TR1 和 TR2,以便每个部分的一半特征模式进入 TR1,剩下的一半进入 TR2。 相同的代码

 int n;//No of Patterns
 int f=0;;//No of Features


 System.out.println("Enter No of Patterns:");
 n=Integer.parseInt(input.readLine());

 //2-D array to store Features
 int pattern[][]= new int[n][20];
 int tr1[][]=new int[n][20];//TR1
 int tr2[][]=new int[n][20];//TR2

//No of Features for each Pattern
 for(int i=0;i<n;i++)//NO of Features for each Pattern
 { 
     System.out.println("Enter No of Features for Pattern "+(i+1)+" : ");
     f=Integer.parseInt(input.readLine());
     pattern[i]=new int[f];
     tr1[i]=new int[f/2];//definining size of TR1 
     tr2[i]=new int[f/2];//definining size of TR2
 }

//Features of each pattern
for(int i=0;i<n;i++)
 {
    System.out.println("Enter Features for Pattern "+(i+1)+" : ");
    for(int j=0;j<pattern[i].length;j++)
    {
    pattern[i][j]=Integer.parseInt(input.readLine());

    }
 }
//Split into TR1 & TR2 
for(int i=0;i<n;i++)
 {
    for(int j=0;j<pattern[i].length/2;j++)
    {
    tr1[i][j]=pattern[i][j];
    }   
    int x=0;//Fill TR2 from 0 index
    for(int j=pattern[i].length;j<pattern[i].length;j++)
    {
    tr2[i][x]=pattern[i][j];
            x++;
    }
 }




//Print Features of each pattern
for(int i=0;i<n;i++)
 {

    for(int j=0;j<pattern[i].length;j++)
    {
    System.out.print(" "+pattern[i][j]+" ");
    }
    System.out.println();
 }

 //Print TR1
 for(int i=0;i<n;i++)
 {

    for(int j=0;j<tr1[i].length;j++)
    {
    System.out.print(" "+tr1[i][j]+" ");

    }
    System.out.println();
 }

     //Print TR2
 for(int i=0;i<n;i++)
 {

    for(int j=0;j<tr2[i].length;j++)
    {
    System.out.print(" "+tr2[i][j]+" ");

    }
    System.out.println();
 }

问题是 TR2 中的所有值在输出中都变为 0。但是 TR1 输出是正确的。

【问题讨论】:

  • for(int j=pattern[i].length;j&lt;pattern[i].length;j++) 这行是问题
  • for(int j=pattern[i].length/2;j&lt;pattern[i].length;j++)//这样做了,但是在代码中的tr2[i][x]=pattern[i][j];行上给出了绑定异常的数组

标签: java arrays


【解决方案1】:

for 循环中,条件j &lt; pattern[i].length 为假,因为:

int j = pattern[i].length;

由于第一次条件为假,for 循环内的语句根本没有执行。这就是为什么TR2 的元素保持未初始化的原因,这就是为什么TR2 的元素变成0。 .

for(int j=pattern[i].length;j<pattern[i].length;j++)
{
  tr2[i][x]=pattern[i][j];  //Never executes
  x++;                      //Never Executes 
}

查看它会有所帮助的链接。 java-how-to-split-a-2d-array-into-two-2d-arrays

【讨论】:

  • @Ashraful Haque``for(int j=pattern[i].length/2;j&lt;pattern[i].length;j++) 这应该在int j=pattern[i].length/2 时起作用,但它会给出数组超出范围的异常
  • 已解决 :D 问题在这里 tr1[i]=new int[f/2]; tr2[i]=new int[f/2];// 当 f 为奇数时,数组越界错误发生
  • 是的,知道了。如果奇怪,你现在会做什么?
  • if(f%2==0) { int half=f/2; tr1[i]=new int[half];tr2[i]=new int[half];} else { int half=f/2; tr1[i]=new int[half];tr2[i]=new int[half+1];}这解决了我的奇数错误
猜你喜欢
  • 1970-01-01
  • 2021-11-30
  • 2019-05-03
  • 1970-01-01
  • 2014-07-31
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多