Java 用c 二维数组组编程 井字棋问题求助!

Java动态定义二维数组问题_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Java动态定义二维数组问题
来源:Linux社区&
作者:xcxinghai
想将查询数据库的内容复制到二维数组中,但是总是NullPointerException,提示空指针的异常。
反正我是自己研究了一个晚上,百度上看了很多的关于动态初始化二维数组的文章,但是就是没找到我这种情况的。
无奈之下,我厚着脸皮向我的指导老师发出了请求的邮件,老师在百忙之中,还是很细心的为我解答。我看到老师回复的邮件豁然开朗。
下面将邮件的内容与大家分享!
//对于自定义的类,当用它定义对象数组时,不仅要初始化元素的个数,还要new出每个数组元素,& //才真正初始化出了对象数组,才可以进行赋值等操作,否则就会出现NullPointerException(空指针异常)!& class MultiDimensionArray // 一个自定义的类,用于定义**数组来测试用。& {&
& & // 定义成员变量a& & & // 定义成员变量b& &
& & public MultiDimensionArray() // 无参构造函数& & & {&
& & & & this.a = 0;& & & & & this.b = 0;& & & }&
& & public MultiDimensionArray(int i, int j) // 有参构造函数& & & {&
& & & & this.a =&
& & & & this.b =& & & }&
public class ArrayDefinition {& & & &
//在这个类中,将使用上面的类来定义对象数组。& & & public static void main(String[] args) {& & & & & MultiDimensionArray objArray[][] = new MultiDimensionArray[3][]; //按你的方式定义一个对象数组!& & & & & objArray[0]=new MultiDimensionArray[3];& //定义第一行的列数& & & & & &
& & & & objArray[0][0].a = 88;//此时这一句就出现NullPointerException,因为对象objArray[0][0]本身还没new出来!& & & & & &
& & & & objArray[0][0]=new MultiDimensionArray();& //new出objArray[0][0]来,给该分配了空间。& & & & & &
& & & & objArray[0][0].a = 88;& //此时这条语句就没错了。& & & & & //同理,对于自定义对象数组,要通过循环new出每个元素之后,才可以给它们赋值!& & & }&
相关资讯 & & &
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款二维数组初始化
本文所属图书&>&
本书基于Java SE平台,从初学者的角度出发,通过通俗易懂的语言、丰富的实例、细腻的讲解,由浅入深、循序渐进地全面介绍了Java语言的基础知识和常用开发技术。本书讲解时多用类比、对比等写作手法,并配合大量...&&
和一维数组一样,二维数组的初始化也分为静态初始化和动态初始化两种。每一种的格式均不同,但它们都是等效的。
1.二维数组的静态初始化
二维数组静态初始化的语法格式如下。
【格式4-6】 二维数组静态初始化
数据类型 数组名[][]={{第0行元素值},{第1行元素值}&&{第n行元素值}};
数据类型 数组名[][]=new 数据类型{{第0行元素值},{第1行元素值}&&{第n行元素值}};
其中,静态初始化时,赋值和数组的声明必须写在一起。赋值书写时,在最外层使用两个花括号嵌套,在里层的花括号内部书写元素的值。元素和元素之间使用逗号分隔,花括号之间也使用逗号分隔。
【范例4-8】 二维数组静态初始化
public class MultiArrayDemo02 {
&&& public static void main(String[] args) {
&&&&&&& //声明int型的二维数组score,并静态初始化score
&&&&&&& int score[][]=new int[][]{{1,2},{3,4,5},{6,7,8,9}};
&&&&&&& //声明String型的二维数组book,并静态初始化book
&&&&&&& String[][] book=new String[][]{{&西游记&,&吴承恩&},{&三国演义&,&罗贯
&&&&&&& 中&},{&水浒传&,&施耐庵&},{&红楼梦&,&曹雪芹&}};
上面的写法中,在声明的同时也开辟了一块内存空间以供数组使用。int score[][]=new int[][]{{1,2},{3,4,5},{6,7,8,9}}声明的是一个3行4列的二维数组(以包含元素最多行的元素个数作为数组列数)。
%注意:行元素和列元素的数据类型要一致。
2.二维数组的动态初始化
二维数组动态初始化的语法格式如下。
【格式4-7】 二维数组动态初始化
数据类型 数组名[][]=new 数据类型[行数][列数];
数组名= new 数据类型{{第0行元素值},{第1行元素值}&&{第n行元素值}};
其中,和一维数组一样,动态初始化必须与数组的声明分开,动态初始化只指定数组的长度,数组中每个元素的初始化是数组声明时数据类型的默认值。
【范例4-9】 二维数组动态初始化
public class MultiArrayDemo03 {
&&& public static void main(String[] args) {
&&&&&&& int score[][]=new int[3][4];&&&&&&& //声明int型的二维数组score
&&&&&&& score=new int[][]{{1,2},{3,4,5},{6,7,8,9}};//动态初始化score
&&&&&&& String[][] book=new String[4][2];&& //声明String型的二维数组book
&&&&&&& book=new String[][]{{&西游记&,&吴承恩&},{&三国演义&,&罗贯中&},
&&&&&&&&&&& {&水浒传&,&施耐庵&},{&红楼梦&,&曹雪芹&}};& //动态初始化book
无论是静态初始化还是动态初始化,都可以将二维数组的表示想象成一个规则的矩阵。如将上面程序中的二维数组score表示为矩阵形式,如图4-14所示。
图4-14& 二维数组score的组织形式
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。求高人!java二维数组打印的问题
[问题点数:20分,结帖人shf]
求高人!java二维数组打印的问题
[问题点数:20分,结帖人shf]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Java 二维数组练习-----字符界面的扫雷
import java.util.S&
public class Mine {&
&&&& * @param args
&&& public static void main(String[] args) {&
&&&&&&& // TODO Auto-generated method stub&&
&&&&&&& //9&9的二维数组&&
&&&&&&& int[][] mine = new int[9][9];&
&&&&&&& int[][] show = new int[9][9];&
&&&&&&& for(int i=0;i&mine.i++){&
&&&&&&&&&&& for(int j=0;j&mine[0].j++){&
&&&&&&&&&&&&&&& mine[i][j] = 0;&
&&&&&&&&&&& }&
&&&&&&& }&
&&&&&&& for(int i=0;i&show.i++){&
&&&&&&&&&&& for(int j=0;j&show[0].j++){&
&&&&&&&&&&&&&&& show[i][j] = 0;&
&&&&&&&&&&& }&
&&&&&&& }&
&&&&&&& //产生随机的坐标&&
&&&&&&& int[] randi = {0,1,2,3,4,5,6,7,8};&
&&&&&&& int[] randj = {0,1,2,3,4,5,6,7,8};&
&&&&&&& int z=0;&
&&&&&&& while(true){&
&&&&&&&&&&& //有待改进&&
&&&&&&&&&&& int i = randi[(int) (Math.random()*10)%9];&
&&&&&&&&&&& int j = randj[(int) (Math.random()*10)%9];&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&& //放雷,数字9表示雷&&
&&&&&&&&&&& if(mine[i][j]&=9){&
&&&&&&&&&&&&&&&&
&&&&&&&&&&& }else{&
&&&&&&&&&&&&&&& if(z&=10){&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&& mine[i][j] = 9;&
&&&&&&&&&&&&&&& z++;&
&&&&&&&&&&& }&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&& //改变数字&&
&&&&&&&&&&& if((i-1&=0 && i-1&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i-1][j-1]++;&
&&&&&&&&&&& if((i-1&=0 && i-1&=mine.length-1)&&(j&=0 &&j&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i-1][j]++;&
&&&&&&&&&&& if((i-1&=0 && i-1&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i-1][j+1]++;&
&&&&&&&&&&& if((i&=0 && i&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i][j-1]++;&
&&&&&&&&&&& if((i&=0 && i&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i][j+1]++;&
&&&&&&&&&&& if((i+1&=0 && i+1&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i+1][j-1]++;&
&&&&&&&&&&& if((i+1&=0 && i+1&=mine.length-1)&&(j&=0 &&j&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i+1][j]++;&
&&&&&&&&&&& if((i+1&=0 && i+1&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))&
&&&&&&&&&&&&&&& mine[i+1][j+1]++;&
&&&&&&& }&
&&&&&&& //去掉大于9的&&
&&&&&&& for(int i=0;i&mine.i++){&
&&&&&&&&&&& for(int j=0;j&mine[0].j++){&
&&&&&&&&&&&&&&& if(mine[i][j] & 9)&
&&&&&&&&&&&&&&&&&&& mine[i][j] = 9;&
&&&&&&&&&&& }&
&&&&&&& }&&&&
&&&&&&& //开始游戏&&
&&&&&&& int score=0;&
&&&&&&& while(true){&
&&&&&&&&&&& //打印界面&&
&&&&&&&&&&& for(int i=0;i&show.i++){&
&&&&&&&&&&&&&&& for(int j=0;j&show[0].j++){&
&&&&&&&&&&&&&&&&&&& System.out.print(show[i][j]+&\t&);&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&& System.out.println();&
&&&&&&&&&&& }&
&&&&&&&&&&&&&
&&&&&&&&&&& //输入坐标&&
&&&&&&&&&&& Scanner sc = new Scanner(System.in);&
&&&&&&&&&&& int x,y;&
&&&&&&&&&&& System.out.println(&请输入坐标:&);&
&&&&&&&&&&& x=sc.nextInt();&
&&&&&&&&&&& y=sc.nextInt();&
&&&&&&&&&&&&&
&&&&&&&&&&& //判断&&
&&&&&&&&&&& if(mine[x][y] == 9){&
&&&&&&&&&&&&&&& System.out.println(&很不幸,你中雷了!!&);&
&&&&&&&&&&&&&&&&
&&&&&&&&&&& }&
&&&&&&&&&&& score++;&
&&&&&&&&&&& if(mine[x][y] == 0){&
&&&&&&&&&&&&&&& show[x][y] = -1;&
&&&&&&&&&&& }else{&
&&&&&&&&&&&&&&& show[x][y] = mine[x][y];&
&&&&&&&&&&& }&
&&&&&&&&&&& if(score == 71){&
&&&&&&&&&&&&&&& System.out.println(&恭喜你赢了!!&);&
&&&&&&&&&&&&&&&&
&&&&&&&&&&& }&
&&&&&&& }&
import java.util.S
public class Mine {
& * @param args
&public static void main(String[] args) {
&&// TODO Auto-generated method stub
&&//9&9的二维数组
&&int[][] mine = new int[9][9];
&&int[][] show = new int[9][9];
&&for(int i=0;i&mine.i++){
&&&for(int j=0;j&mine[0].j++){
&&&&mine[i][j] = 0;
&&for(int i=0;i&show.i++){
&&&for(int j=0;j&show[0].j++){
&&&&show[i][j] = 0;
&&//产生随机的坐标
&&int[] randi = {0,1,2,3,4,5,6,7,8};
&&int[] randj = {0,1,2,3,4,5,6,7,8};
&&int z=0;
&&while(true){
&&&//有待改进
&&&int i = randi[(int) (Math.random()*10)%9];
&&&int j = randj[(int) (Math.random()*10)%9];
&&&//放雷,数字9表示雷
&&&if(mine[i][j]&=9){
&&&&if(z&=10){
&&&&mine[i][j] = 9;
&&&//改变数字
&&&if((i-1&=0 && i-1&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))
&&&&mine[i-1][j-1]++;
&&&if((i-1&=0 && i-1&=mine.length-1)&&(j&=0 &&j&=mine[0].length-1))
&&&&mine[i-1][j]++;
&&&if((i-1&=0 && i-1&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))
&&&&mine[i-1][j+1]++;
&&&if((i&=0 && i&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))
&&&&mine[i][j-1]++;
&&&if((i&=0 && i&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))
&&&&mine[i][j+1]++;
&&&if((i+1&=0 && i+1&=mine.length-1)&&(j-1&=0 &&j-1&=mine[0].length-1))
&&&&mine[i+1][j-1]++;
&&&if((i+1&=0 && i+1&=mine.length-1)&&(j&=0 &&j&=mine[0].length-1))
&&&&mine[i+1][j]++;
&&&if((i+1&=0 && i+1&=mine.length-1)&&(j+1&=0 &&j+1&=mine[0].length-1))
&&&&mine[i+1][j+1]++;
&&//去掉大于9的
&&for(int i=0;i&mine.i++){
&&&for(int j=0;j&mine[0].j++){
&&&&if(mine[i][j] & 9)
&&&&&mine[i][j] = 9;
&&//开始游戏
&&int score=0;
&&while(true){
&&&//打印界面
&&&for(int i=0;i&show.i++){
&&&&for(int j=0;j&show[0].j++){
&&&&&System.out.print(show[i][j]+&\t&);
&&&&System.out.println();
&&&//输入坐标
&&&Scanner sc = new Scanner(System.in);
&&&int x,y;
&&&System.out.println(&请输入坐标:&);
&&&x=sc.nextInt();
&&&y=sc.nextInt();
&&&if(mine[x][y] == 9){
&&&&System.out.println(&很不幸,你中雷了!!&);
&&&score++;
&&&if(mine[x][y] == 0){
&&&&show[x][y] = -1;
&&&&show[x][y] = mine[x][y];
&&&if(score == 71){
&&&&System.out.println(&恭喜你赢了!!&);
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
JAVA版井字棋的设计与实现
下载积分:1000
内容提示:JAVA版井字棋的设计与实现
文档格式:DOC|
浏览次数:29|
上传日期: 00:09:22|
文档星级:
该用户还上传了这些文档
JAVA版井字棋的设计与实现
官方公共微信}

我要回帖

更多关于 二维数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信