java 程序运行错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 程序运行错误相关的知识,希望对你有一定的参考价值。

import java.util.*;
public class Game21
public static void main(String[] args)
ArrayList<Integer>ZhiPai=new ArrayList();
int i=1;
while(i<=53)
ZhiPai.add(i);

System.out.println(ZhiPai);
for(int j=1;j<50;j++)
int temp,theRandom1,theRandom2;
theRandom1=(int)(Math.random()*53);
theRandom2=(int)(Math.random()*53);

temp=ZhiPai[theRandom1];ZhiPai[theRandom1]=ZhiPai[theRandom2];ZhiPai[theRandom2]=temp;


System.out.println(ZhiPai);


运行时错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The type of the expression must be an array type but it resolved to ArrayList<Integer>
The type of the expression must be an array type but it resolved to ArrayList<Integer>
The type of the expression must be an array type but it resolved to ArrayList<Integer>
The type of the expression must be an array type but it resolved to ArrayList<Integer>

at game21.Game21.main(Game21.java:18)
import java.util.*;

public class Game21
public static void main(String[] args)
ArrayList<Integer>zhiPai=new ArrayList<Integer>();
int i=1;
while(i<=53)
zhiPai.add(i);
i++;
System.out.println(zhiPai);
for(int j=1;j<50;j++)
int temp,theRandom1,theRandom2;
theRandom1=(int)(Math.random()*53);
theRandom2=(int)(Math.random()*53);

temp=zhiPai[theRandom1];zhiPai[theRandom1]=zhiPai[theRandom2];zhiPai[theRandom2]=temp;


System.out.println(zhiPai);

看是发生了什么错误,大多数错误都可以通过改写原编码来解决。

程序的错误可以抽象分为三类:语法错误、运行错误和逻辑错误。

1、语法错误

是指由于编程中输入不符合语法规则而产生的。程序编译就通不过,程序不能运行起来。此类错误最简单,调试起来比较容易

例如:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。通常,编译器对程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,又称为编译错误。
语法错误的调试,则可以由集成开发环境提供的调试功能来实现,在程序进行编译时,编译器会对程序中的语法错误进行诊断。

编译诊断的语法错误分为3中:致命错误、错误和警告。
(1)致命错误:这个错误大多是编译程序内部发生的错误,发生这类错误时,编译被迫中止,只能重新启动编译程序,但是这类错误很少发生,为了安全,编译前最好还是先保存程序。
(2)错误:这个错误通常是在编译时,语法不当所引起的。例如:括号不匹配,变量未声明等。产生这类错误时,编译程序会出现报错提示,我们根据提示对源程序进行修改即可。这类错误是出现最多的。
(3)警告:是指被编译程序怀疑有错,但是不确定,有时可强行通过。例如:没有加void声明的主函数没有返回值,double数据被转换为float类型等。这些警告中有些会导致错误,有些可以通过。

常规解决方法:此类错误一般程序编译系统会自动提示相应的错误地点和错误原因,比如哪一行代码少了个括号等诸如此类的提示,常见的错误,看懂直接改正即可,如果是看不懂原因,可以将错误提示信息输入搜索引擎查找一下,一般都能找到具体的解决办法。或者有些编程平台会本身提供一个本地或者在线的信息库,提供详细的错误原因和解决办法,比如微软的.NET开发平台。

2、运行错误

指程序在运行过程中出现的错误。程序通过语法错误检测,但是运行的时候出现错误,导致程序被迫终止,此类错误有特定的发生条件,因此能够准确的定位错误代码段,因而调试也比较方便。

例如:除法运算时除数为0 、数组下标越界、文件打不开、磁盘空间不够、数据库连接错误等。

此类错误发生时,编译平台一般也会提示相应的信息,对于常规的错误会有比较精确地提示,但有时提示的错误原因会比较模糊,但因为此类错误一般在程序运行时,只在特定的条件下才会发生,所以根据错误发生的条件,能够大致判断程序出错的代码段,结合错误的原因,也能比较方便的调试出错误。

3、逻辑错误

程序运行后,没有得到设计者预期的结果,这就说明程序存在逻辑错误。这种错误在语法上是有效的,但是在逻辑上是错误的。

程序运行了,也没有出错,但是执行出来的结果不是用户想要的,分为两种情况:

A、       能够看出错误:比如查询工资大于5000的人员名单,却出现了3000的;

B、       看不出错误,直到因缘际会发现程序肯定出错了,后果很严重:比如进行一个符合大型运算,把某个常数输入错了,最后的结果人工无法判断对错,又以该结果进行其它的运算等等,最后发现错了误差过大,就得从头排查错误。

参考技术A 错误1:while(i<=53)
ZhiPai.add(i);

这句话是标准的死循环,应该是:
while(i<=53)
ZhiPai.add(i++);

或者:
while(i<=53)
ZhiPai.add(i);
i++;

错误2:ArrayList的取值方法应该算是:ZhiPai.get(theRandom1),而不是使用数组的方式,如果想使用数组的方式可以将ArrayList转换成数组,使用toArray方法。追问

我不是打算取值,而是想把数组顺序打乱,theRandom是数组下标.

追答

明白了,那你可以这样:
for(int j=1;j<50;j++)
int temp,theRandom1,theRandom2;
theRandom1=(int)(Math.random()*53);
theRandom2=(int)(Math.random()*53);

temp=zhiPai.get(theRandom1);
zhiPai.set(theRandom1,zhiPai.get(theRandom2));
zhiPai.set(theRandom2,temp);

这样应该符合您的意思吧。

参考技术B 你里面的Zhipai是个ArrayList,取值要用:temp=ZhiPai.get(theRandom1);但你却按数组的方式:temp=ZhiPai[theRandom1];这是一类错误,除此之外,你的:
int i=1;
while(i<=53)
ZhiPai.add(i);

这段代码是死循环呀。
还有,给实例对象命名为Zhipai不标准,要用zhiPai,这样才标准。
但愿能解决你的问题,不行可以追问。追问

已经在while中加入了i++,Zhipai改成了zhiPai还是不行.

追答

改过的代码贴出来。

追问

改正的在问题补充里了

追答

我给你改的,你看下,是不是你要的意思。
public static void main(String[] args)
ArrayList ZhiPai = new ArrayList();
int i = 1;
while (i <= 53)
ZhiPai.add(i);
i++;

System.out.println(ZhiPai);
for (int j = 1; j < 50; j++)
int temp, theRandom1, theRandom2;
theRandom1 = (int) (Math.random() * 53);
theRandom2 = (int) (Math.random() * 53);

temp = ZhiPai.get(theRandom1);
ZhiPai.set(theRandom1, ZhiPai.get(theRandom2) );
ZhiPai.set(theRandom2, temp );


System.out.println(ZhiPai);

追问

恩,那个get和set是干什么用的?

追答

ZhiPai.get(theRandom1);是用来取Arraylist中索引为theRandom1的值。
ZhiPai.set(theRandom1, ZhiPai.get(theRandom2) );set是为ArrayList中索引为theRandom1赋值。
你原来那是方式思想是对的,但是操作的方法不对,ArrayList和数组的操作方式不一样,你可以对比着理解。或者查下,帮助文档。
很高兴能帮你解决问题。。。。

本回答被提问者采纳
参考技术C temp=zhiPai[theRandom1];zhiPai[theRandom1]=zhiPai[theRandom2];zhiPai[theRandom2]=temp;
ArrayList集合应该以.add(Object o)添加元素
不能zhiPai[theRandom1]=zhiPai[theRandom2];zhiPai[theRandom2]=temp;这样赋值,
或以.get(int index)获取元素
不能temp=zhiPai[theRandom1];这样获取
参考技术D 编译出错,检查你的代码

建议放在Eclispe中,会自动检查语法问题追问

我的确是在Eclispe运行的,刚发现了个错误,while 中加入了i++;问题仍然没有解决

Java 程序运行时出现了错误,请大神们帮帮我!该怎么解决

org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/student/wzjs/ymzc.jsp at line 2119: <body>21: <html:form action="/ymglb.do?method=ymlist" method="post">22: <table width="783" border="1" align="center">

参考技术A /jsp/student/wzjs/ymzc.jsp,你看看这个页面上是不是写的不规范追问

写的没错呀

追答

在配置文件里面是不是配置错了ymglb配置

追问

也没有错

以上是关于java 程序运行错误的主要内容,如果未能解决你的问题,请参考以下文章

ant jar 错误:执行失败:java.io.IOException:无法运行程序...$aapt":错误=2,没有这样的文件或目录

java程序在linux系统下运行上传文件到ftp服务器出错代码 “451 参数错误”

由于 kotlin 错误,Java Spring Boot 应用程序无法从 IDEA 运行

下面一个java程序在eclipse中运行时出现了main主函数错误?我发现很多程序都是这种错误,大侠们帮帮忙吧…

Java 错误:“您的安全设置已阻止本地应用程序运行”

编译JAVA程序成功但运行javac命令时出现错误