前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IndexOutOf下标越界几种解决方案

IndexOutOf下标越界几种解决方案

作者头像
红目香薰
发布2022-11-30 19:33:27
1.3K0
发布2022-11-30 19:33:27
举报
文章被收录于专栏:CSDNToQQCode

目录

python下标越界list index out of range

Java下标越界java.lang.ArrayIndexOutOfBoundsException

Java String index out of range

C语言数组下标越界out terminated

C++数组下标越界不报错

C#数组下标越界System.IndexOutOfRangeException

PHP数组下标越界Notice: Undefined offset:1

总结


python下标越界list index out of range

python里说的是list越界,其实也就是列表,格式是【arr=["1","2","3"]】这样的,如果输出的时候超出下标数量就会报这个异常。来我们截图看一下。

还是很明显的。

Java下标越界java.lang.ArrayIndexOutOfBoundsException

无论是数组还是集合列表在下标越界的时候都会报这个异常,只是后续提示的内容有所区别,我们来看一下:

String [] arr=new String[10];

System.out.println(arr[11]);

ArrayList<Integer> arr=new ArrayList<Integer>(); 

System.out.println(arr.get(11));

Java String index out of range

Java字符串超出索引的范围,这里的out of是【越出…之外】的意思,range就是【范围】,超出范围肯定会报错的。

C语言数组下标越界out terminated

#include <stdio.h>

int main() {     int a[10]={0};     a[10] = 0;     return 0; }

C语言的下标越界报错有些不同。

*** stack smashing detected ***: ./970872.out terminated

可以看到包的错不是index out of,是out terminated,也就是超出终止范围。

画一个小爱心,祝大家都能顺利解决各种bug。

代码语言:javascript
复制
#include <stdio.h>

int main() {

	printf("\n\n绘制一个心形图案:");

	for (float y = 1.5f; y > -1.5f; y -= 0.1f) {
		for (float x = -1.5f; x < 1.5f; x += 0.05f) {
			float a = x * x + y * y - 1;
			putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ');
		}
		putchar('\n');
	}

	return 0;
}

C++数组下标越界不报错

C++比较特殊,下标越界的时候啥也不报,这个挺难受的。

#include <stdio.h> #include <iostream> #include <math.h> int main() {     using namespace std;

    char a[]={'1','2'};     cout << a[5]<<endl;

    return 0; }

很明显的上列代码是有越界的,执行的时候啥都没有,不报错。

linux平台或者g++编译器对下标越界问题有自己的处理,导致程序不挂。而Visual c++编译器对下标越界不进行处理,程序挂掉。

来个好看一些的心来平绪一下心情吧:

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include <math.h>

float f(float x, float y, float z) {
	float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
	return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}

float h(float x, float z) {
	for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
		if (f(x, y, z) <= 0.0f) {
			return y;
		}
	return 0.0f;
}

int main() {
	using namespace std;

	for (float z = 1.5f; z > -1.5f; z -= 0.05f) {
		for (float x = -1.5f; x < 1.5f; x += 0.025f) {
			float v = f(x, 0.0f, z);
			if (v <= 0.0f) {
				float y0 = h(x, z);
				float ny = 0.01f;
				float nx = h(x + ny, z) - y0;
				float nz = h(x, z + ny) - y0;
				float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
				float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
				putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
			} else {
				putchar(' ');
			}
		}
		putchar('\n');
	}

	return 0;
}

C#数组下标越界System.IndexOutOfRangeException

C#的越界和Java的差不多,都会提示出来,直接说明是怎么回事。有中文提示还是挺方便的。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace demo20221008 {     class Program     {         static void Main(string[] args)         {             int[] arr = new int[5];             Console.WriteLine(arr[6]);         }     } }

PHP数组下标越界Notice: Undefined offset:1

代码语言:javascript
复制
Notice: Undefined offset: 22 in D:\phpStudy\PHPTutorial\WWW\demo.php on line 4

这是PHP的数组下标越界,一看就明白,未定义的开端,也就是没有这个开始。那肯定就是越界了。

总结

其它小众的语言我就不举例了,我们挨个看了看常用的语言数组下标越界的情况,从而能在以后的异常中快速定位问题所在快速解决bug。

异常是很常见的,一个不会解决bug的程序员是很难找到成就感的,当你突破一个个bug后那种自豪感还是很棒的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python下标越界list index out of range
  • Java下标越界java.lang.ArrayIndexOutOfBoundsException
  • Java String index out of range
  • C语言数组下标越界out terminated
  • C++数组下标越界不报错
  • C#数组下标越界System.IndexOutOfRangeException
  • PHP数组下标越界Notice: Undefined offset:1
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档