㈠ Java数组元素位置怎么交换
1、定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}。
2、将数组最大元素与最后一位元素进行交换,最小元素与第一位元素进行交换,并打印数组。
具体如下:
1、简介
编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,是计算体系按照该计算方式运行,并最终得到相应结果的过程。
为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。
2、汇编程序
汇编程序。使用汇编语言编写计算机程序,程序员仍然需要十分熟悉计算机系统的硬件结构,所以从程序设计本身上来看仍然是低效率的、繁琐的。但正是由于汇编语言与计算机硬件系统关系密切,在某些特定的场合,如对时空效率要求很高的系统核心程序以及实时控制程序等,迄今为止汇编语言仍然是十分有效的程序设计工具。
3、执行原理
计算机对除机器语言以外的源程序不能直接识别、理解和执行,都必须通过某种方式转换为计算机能够直接执行的。这种将高级编程硬件程序设计语言编写的源程序转换到机器目标程序的方式有两种:解释方式和编译方式。
㈡ 怎么解决三维数组在空间的排列问题
多维数组、数组的排序
多维数组可以理解为由若干低维数组组成的数组,例如,多个一维数组可以组合而成为“二维数组”,多个二维数组组成三维数组…
二维数组的结构:
s[i][j] j=0 j=1 j=2
i=0 67 89 53
i=1 77 98 68
i=2 57 66 73
i=3 80 88 94
i=4 84 92 90
多行多列、类型相同的数据组成的数据表
二维数组s的第一维的长度为5,即数组s是由5个一维整型数组类型(int[])元素组成,分别标记为s[0] s[1] s[2]…,这5个一维数组的长度,即数组s的第二维的长度为3 。
要访问二维数组中的某个元素,需要知道该元素的位置(第几行、第几列)
二维数组的声明
格式:类型名(任意合法的Java数据类型
) 变量名[][];(标明声明的是二维数组
) 或 类型名[][] 变量名;(合法的Java语言标识符
)
例如,int[][] s; Student s[][];
需注意:声明了数组类型变量,运行时系统只为引用变量分配引用空间,并没有创建对象,也不会为数组元素分配空间,因此尚不能使用任何数组元素。
静态初始化
格式:类型[][] 数组名={{第0行初值},…,{第n-1行初值}};
例如,int[][] s={{67,89,53},{77,98,68},{57,66,73},{80,88,94},{84,92,90}};
动态初始化
直接为每一维分配空间
例如,int [][] s=new int[5][3];
从最高维开始(必须从最高维开始),分别为每一维分配空间。例如,int[][] s=new int[5][];
s[0]=new int[3]; s[1]=new int[3];…
注意: Java中允许二维数组中每行的元素个数不同,即每行的列数可以不同。例如,int[][] s=new int[3][];
s[0]=new int[1]; s[1]=new int[2]; s[2]=new int[3];
注意:使用二维数组s的length属性可获得二维数组高维的大小,即行数;使用s[i].length属性可获得二维数组每一行的列数,即每一行的元素个数。
for(int i=0;i<s.length;i++){
for(int j=0;j<s[i].length;j++)
sum+=s[i][j];
}
在JDK的java.util包中定义的Arrays类提供了多种数组操作方法,实现了对数组元素的排序、填充、转换、增强检索和深度比较等功能,所有的这些方法都是static的。
数组元素的排序方法
原型:public static void sort(<type>[] a);
例如,int[] a={4,12,0,-5,45,-56};
Arrays.sort(a);
注意:数组元素的排序通常指一维数值型数组元素按升序排序,偶尔也会涉及一维String数组的排序,多维和其他引用类型的数组排序实用意义不大。
㈢ 数组的方法有哪些
数组中常用的方法有:
1、给数组末尾添加新内容的push方法;
2、删除数组最后一项的pop方法;
3、删除数组第一项的shift方法;
4、向数组首位添加新内容unshift方法;
5、按照条件查找出其中的部分内容。
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。
在C语言中, 数组[2]属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。
如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。
此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
㈣ 怎么解决数组越界的问题
1、什么是数组访问越界?
我们通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。
如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到
n-1的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界。
数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了。
2、访问越界会出现什么结果?
首先,它并不会造成编译错误!就是说,C,C++的编译器并不判断和指出你的代码“访问越界”了。一个明明是错误的东西,就这样“顺利”地通过了编译。数组访问越界在运行时,它的表现是不定的,有时似乎什么事也没有,程序一直运行(当然,某些错误结果已造成);有时,则是程序一下子崩溃。因此在使用数组时,一定要在编程中判断是否越界以保证程序的正确性。
常见的错误就是数组的size值和下标访问值弄错,数组的下表是从0开始的,最大的访问值是size-1。
3、解决办法
由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。
举例:
#include<stdio.h>
void PutArray(int *p, int length)
{
// 在此判断入口参数p和length的有效性
……
for(int
i=0;i<length;i++)
printf("%d\t",p[i]);
}
void main()
{
int a[3]={2,4,6} ;
printf("数组a[3]调用函数PutArray的结果为:\n");
PutArray(a,
sizeof(a)/sizeof(a[0]));
}
㈤ 数组下标的问题
记得循环的时候,下标是从0开始到N-1,打印出遍历数组的索引十分有帮助,注意一下它的循环条件,也可以加断点。
当处理数组越界时,打印出遍历数组的索引十分有帮助,这样我们就能够跟踪代码找到为什么索引达到了一个非法的值。
所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。
㈥ 数组元素个数超过20000时,编译时没有错,一运行就报错,错误显示如下,该如何解决
这是我网络到的,其他网友的回答,也许对你有用,看看吧。
使用Windows操作系统的人有时会遇到这样的错误信息:
““0X????????”指令引用的“0x00000000”内存,该内存不能为“read”或“written””,然后应用程序被关闭。
如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的一般原因。
一、应用程序没有检查内存分配失败
程序需要一块内存用以储存数据时,就需要使用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“光标”。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的游标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用游标,继续在之后的执行中使用这块内存。真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如
Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统档案之后。
二、应用程序由于自身BUG引用了不正常的内存光标
在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块“应该可用”的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其它随机数字。如果系统经常有所提到的错误提示,下面的建议可能会有说明
:
1.检视系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,
从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。
2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。
有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。
3.试用新版本的应用程序。
Mode:
将虚拟内存撤换
答案:
目前为止是肯定的,也就是如在下次冷天到来时亦没再发生,就代表这是主因
追加:
如果你用
Ghost 恢复 OS 后建议 删除WINDOWS\PREFETCH目录下所有*.PF文件因为需让windows重新收集程序的物理地址
有些应用程序错误
"0x7cd64998" 指令参考的 "0x14c96730" 内存。该内存不能为 "read"推论是此原因
源由:
Win
XP的“预读取”技术
这种最佳化技术也被用到了应用软件上,系统对每一个应用软件的前几次启动情况进行分析,然后新增一个描述套用需求的虚拟“内存映像”,并把这些信息储存到
WINDOWSPREFETCH数据夹。一旦建立了映像,应用软件的装入速度大大提高。XP的预读取数据储存了最近8次系统启动或应用软件启动的信息。
后叙:
目前此方法亦是独步网络的(其码自己针对此问题查了许久),也是常见问题,原本几乎每天睡前关闭软件时一些程序都会发生...read...
现在就没发生了。
【文章二】
运行某些程序的时候,有时会出现内存错误的提示(0x后面内容有可能不一样),然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
不知你出现过类似这样的故障吗?
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
下面先说说硬件:
一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest
这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。
假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。
如果都没有,那就从软件方面排除故障了。
先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当你放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows
2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows
98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。
下面我从几个例子给大家分析:
例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。
例二:在windows
xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为
“written”,要终止程序,请单击“确定”,而在Windows
98里运行却正常。解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows
98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32
c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。
例三:RealOne
Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为 “read”
的提示。解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne
之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。
例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示
“0x060692f6”(每次变化)指令引用的“0xff000011”内存不能为“read”,终止程序请按确定。解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。
例五:双击一个游戏的快捷方式,“0x77f5cd0”指令引用“0xffffffff”内
存,该内存不能为“read” ,并且提示Client.dat程序错误。
解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。
例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x00303033”内存,该内存不能为
“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。
【原因
解决方法】
1 内存条坏了 更换内存条
2 双内存不兼容 使用同品牌的内存或只要一条内存
3 内存质量问题 更换内存条
4 散热问题
加强机箱内部的散热
5 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽
6 硬件有问题 更换硬盘
7 驱动问题
重装驱动,如果是新系统,应先安装主板驱动
8 软件损坏 重装软件
9 软件有BUG 打补丁或更新到最新版本
10 软件和系统不兼容
给软件打上补丁或是试试系统的兼容模式
11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试
12 软件要使用其他相关的软件有问题
重装相关软件,比如播放某一格式的文件时出错,可能是这个文件的解码器有问题
13 病毒问题 杀毒
14 杀毒软件与系统或软件相冲突
由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试
15 系统本身有问题
有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序,象SP的补丁,最好打上.如果还不行,重装系统,或更换其他版本的系统。
〔又一说〕
在控制面板的添加/删除程序中看看你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装。
另外,如果你用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在NET.Framework正常工作的环境下)。这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动。
如果以上两种方法并不能完全解决问题,你试着用一下“IE修复”软件,并可以查查是否有病毒之类的。
〔微软NET.Framework升级到1.1版应该没问题了〕
〔还有一说〕
方法一:
微软新闻组的朋友指点:开始--运行:regsvr32
jscript.dll
开始--运行:regsvr32
vbscript.dll
不过没解决---但提供了路子-----一次运行注册所有dll
搜索查找到方法如下:
运行 输入cmd
回车在命令提示符下输入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s
%1
这个命令老兄你慢慢输 输入正确的话会看到飞快地滚屏 否则……否则失败就是没这效果。回车后慢慢等(需要点时间1-2分钟)
都运行完再打开看
方法二:
这是个典型问题~~~~~引起这个问题的原因很多。一般来讲就是给系统打上补丁和更换内存、给内存换个插槽这3种方法来解决。[系统补丁只要到Microsoft
Update网站在线更新就可以了]
(偶见)
造成这种问题的原因很多,不能单纯的下结论,尽量做到以下几点可能对你有帮助:
1。确保使用的是未修改过的软件(非汉化、破解版)
2。使用改软件时尽量不要运行其他软件。(这是个临时文件,可能某些软件也在使用临时文件夹,所以产生干扰)
3。把那些什么桌面工具,内存整理工具通通关掉(你至少有2个类似的工具在运行)”
处理方法:
运行regedit进入注册表,
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972},
将其他的删除。
〔我个人的最后解决和看法〕
我今天尝试了多种办法,最后我发现问题出在微软的NET.Framework上面。我升级了这个软件,并打齐了补丁,短暂平安后,有出现“内存不能为read”的情况。后来我受上面文章的启发,卸载了微软的NET.Framework1.0和1.1,世界太平了。
另外:如果是打开“我的电脑”、“我的文档”等的时候出现上述情况,还有一种可能,就是你的右键菜单太臃肿了,此时只要清理右键菜单问题就解决了。
--------------------------------------------------------------------------------
〔试验的结果〕
上面的方法,最管用、最彻底的方法是这个:
运行
输入cmd 回车在命令提示符下输入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s
%1
【技巧】如果怕输入错误的话,可以复制这条指令,然后在命令提示框点击左上角的c:\,使用下面的“编辑-粘贴”功能就不容易输错了。在飞速滚屏完全静止之后,别着急启动其他程序,先耐心等一会儿,因为此时dll们还在找位置。直到你的指示灯不闪了再做别的。
㈦ 一道关于C语言数组的问题,求大神 !!!
显然错误,a[i]=a[i+1];有问题,等于 x 的数被后面替换了,但是后面的那个数字还在那里。例子:
1,3,4,5一串数字,要删除3
到i=1,x=3也就是 a[1]==3的时候,数组变成了1,4,4,5
最后也还是这样,于是有了两个重复的数字。
解决办法:
办法1:再建一个数组,把符合的数字扔进去;
办法2:把后面的数字顺次前移。
㈧ 关于ASP数组下标越界问题解决办法及如何判断某元素是否为空
str="1,2,4,6,7;1,3,8;1,2;2,3,5;1;;2,3;"
z =Split(str,";")
For Each i In z
a=Split(i,",")
if ubound(a)>1 then response.write("只要a的第二个下标内元素:"&a(2)&"<br>")
response.write("<hr>")
Next
去查下Ubound的用法就明白为什么这么写了
㈨ c语言数组的问题 比如定义了一个数组a[7];那么a[0],a[1]与它什么关系,刚刚学习,请说详细一些。
a[0]和a[1]是数组里面的元素比如说a[7]={1,2,3,4,5,6,7};
a[0]就是1
a[1]就是2
但是要注意不能越界,比如a[7]是错误的,因为访问下标从0开始的,最大只能是a[6]