[已解决] 索引超出数组边界问题

[复制链接]
954161773 发表于 2022-11-18 22:53:12
1.程序

cspx02

cspx02 =

   197
   157
   167
   166
   160
    93
    57
    60
    29
    14

[m1,n1]=size(cspx02);
   for w=2:m1
    if cspx02(w,1)>cspx02(w-1,1)
       cspx02(w,:)=[];
    end
   end

2.问题

位置 1 处的索引超出数组边界(不能超出 8)。
请问如何解决?

最佳答案


cbcbcbcb 发表于 2022-11-18 23:50:18
因为你有这行代码cspx02(w,:)=[];这行代码的作用是在满足if条件后,给某一行赋空值(就是让cspx02这个数组长度变短了),运行到后面数组长度就小于8了,就报错了
回复此楼

7 条回复


cbcbcbcb 发表于 2022-11-18 23:50:18
因为你有这行代码cspx02(w,:)=[];这行代码的作用是在满足if条件后,给某一行赋空值(就是让cspx02这个数组长度变短了),运行到后面数组长度就小于8了,就报错了
回复此楼

954161773 发表于 2022-11-18 23:50:56
cbcbcbcb 发表于 2022-11-18 23:50
因为你有这行代码cspx02(w,=[];这行代码的作用是在满足if条件后,给某一行赋空值(就是让cspx02这个数组 ...

请问大佬 这个改如何解决呢

cbcbcbcb 发表于 2022-11-19 00:03:16
954161773 发表于 2022-11-18 23:50
请问大佬 这个改如何解决呢

参考代码:
  1. clear;clc

  2. cspx02 =[197;157;167;166;160;93;57;60;29;14];
  3. [m1,~]=size(cspx02);
  4. a = ones(m1-1,1);

  5.    for w=2:m1
  6.     if cspx02(w,1)>cspx02(w-1,1)
  7.        a(w-1,1)= 0;
  8.     end
  9.    end
  10. cspx02(a==0,:) = [];
复制代码

954161773 发表于 2022-11-19 00:15:49

用一个全1矩阵来当一个指针的作用吗,多谢大佬 受教了

小磁石 发表于 2022-11-19 08:01:34

cspx02 =   [197
   157
   167
   166
   160
    93
    57
    60
    29
    14];

[m1,n1]=size(cspx02);
   for w=m1:-1:2
    if cspx02(w,1)>cspx02(w-1,1)
       cspx02(w,:)=[];
    end
   end

小磁石 发表于 2022-11-19 08:03:15
cspx02 =   [197
   157
   167
   166
   160
    93
    57
    60
    29
    14];

[m1,n1]=size(cspx02);
w=m1;
   while w>1
    if cspx02(w,1)>cspx02(w-1,1)
       cspx02(w,:)=[];
    end
    w=w-1;
   end

超出数组边界的时候,经常可以用for循环倒置或者while来替代,会在不改动源程序太多的情况下解决问题

954161773 发表于 2022-11-19 12:17:47
小磁石 发表于 2022-11-19 08:03
cspx02 =   [197
   157
   167

多谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表