java内部类的使用场景中的private和数组的问题

java 中数组的长度必须在创建是指定?_百度知道
java 中数组的长度必须在创建是指定?
waneman知道合伙人
采纳数:31
获赞数:165
楼上已经说明了必须是创建指定,可是个人有个解决方案。就是用变量。e.g. private Object[] getArray(int num) { return new Object[num];}而num可由你自己随意传入,变相达到了数组长度可变。
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。java数组怎么初始化private int[20] a=???_百度知道
java数组怎么初始化private int[20] a=???
初始为{}也不对啊编译器出错到底哪个对啊呵呵...
初始为{}也不对啊编译器出错到底哪个对啊
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
sokoo108知道合伙人
采纳数:174
获赞数:442
private int[] a = new int[20];首先int[] 是数据类型 不能写长度如你写的:int[20],是不对的!!!其次,数组初始化很多种,如我提供的这种 直接new出数组长度并初始化。 第二种 {} 大括号的,这种适合数据量小且知道初始数据的。第三种数据返回型,也就是方法返回初始化数组定义。你编译就错在定义数据类型时不能写长度,要定义定长的数组 new int[100] 这样子写!!!!
gaolao112知道合伙人
采纳数:63
获赞数:340
擅长:暂未定制
:int[] a=new int[数组长度];给你个char数组转换成int数组的程序代码,你看看就知道了。public class Test {
public static void main(String[] args){
char[] ch = {'3','5','2','4','0','8','1'};
int[] toInt = new int[ch.length];
for(int i=0;i&ch.i++){
toInt[i] = Integer.parseInt(String.valueOf(ch[i]));
System.out.print(toInt[i]);
<span class="wgt-replyer-all-uname
" data-href="https://zhidao.baidu.com/usercenter?uid=d68b05e79007知道合伙人
<span class="wgt-replyer-all-card-name3 wgt-replyer-all-card-names" data-href="https://zhidao.baidu.com/usercenter?uid=d68b05e79007
采纳数:518
获赞数:2200
private int[] a = {};//花括号内填入数字就行了(数量不限),前面的方括号内不能有数字//比如: private int[] a = {1,2,3,5,};
gaogzhen知道合伙人
采纳数:171
获赞数:135
private int a[20]={1,3,...,3};编个简单程序试一下
其他1条回答
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。22:23 提问
为什么会出现数组越界问题?
public class rectangleTest {
static int length = 8;
static int value = 1;
static int[][] arr = new int[length][length];
static direction lastdirection = direction.R
public static void main(String[] args) {
iniarrary();
print(arr);
public enum direction{
Right,Left,Down,Up;
public static void iniarrary(){
int row=0,col=0;
for(int c=0;c&length*c++){
arr[row][col] =
lastdirection = findDirection(row,col);
switch(lastdirection){
case Right:
case Down:
case Left:
System.out.println("error");
public static direction findDirection(int row,int col){
direction Direction =
switch(Direction){
case Right:
if((col==length-1)||(arr[row][col+1]!=0)){
Direction = direction.D
case Down:
if((row==length-1)||(arr[row+1][col]!=0)){
Direction = direction.L
case Left:
if(row==0){
//Direction = direction.Up;
}else if(arr[row-1][col]!=0){
Direction = direction.Up;
if(((row==0)&&(col==0)))
Direction = direction.R
public static void print(int[][] arr){
for (int i=0;i&i++){
for(int j=0;j&j++){
System.out.printf("%2d",arr[i][j]);
System.out.println();
运行时出现以下错误,是为什么?是这个原因吗if(arr[row-1][col]!=0){
Direction = direction.Up;
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at rectangle.rectangleTest.iniarrary(rectangleTest.java:18)
at rectangle.rectangleTest.main(rectangleTest.java:9)
按赞数排序
iniarray方法中的for循环for(int c=0;c&length*c++){
应该是 c&length
你对行列值做了限制但是在函数中没有设计边界条件。
数组越界很明显是因为你外层循环是length*length的,而你的行row和col的最大边界只是length的。
你初始化时整个length*length范围内导致了行列越界。
你里面的row--和col--之后要判断是否小于0
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐java中数组的特性
数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间。在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性。本文就尝试分析这些特性。
中的数组是对象吗?
Java和C++都是面向对象的语言。在使用这些语言的时候,我们可以直接使用标准的类库,也可以使用组合和继承等面向对象的特性构建自己的类,并且根据自己构建的类创建对象。那么,我们是不是应该考虑这样一个问题:在面向对象的语言中,数组是对象吗?
要判断数组是不是对象,那么首先明确什么是对象,也就是对象的定义。在较高的层面上,对象是根据某个类创建出来的一个实例,表示某类事物中一个具体的个体。对象具有各种属性,并且具有一些特定的行为。而在较低的层面上,站在计算机的角度,对象就是内存中的一个内存块,在这个内存块封装了一些数据,也就是类中定义的各个属性,所以,对象是用来封装数据的。以下为一个Person对象在内存中的表示:
1)小的红色矩形表示一个引用(地址)或一个基本类型的数据,大的红色矩形表示一个对象,多个小的红色矩形组合在一块,可组成一个对象。
2)name在对象中只表示一个引用, 也就是一个地址值,它指向一个真实存在的字符串对象。在这里严格区分了引用和对象。
那么在Java中,数组满足以上的条件吗?在较高的层面上,数组不是某类事物中的一个具体的个体,而是多个个体的集合。那么它应该不是对象。而在计算机的角度,数组也是一个内存块,也封装了一些数据,这样的话也可以称之为对象。以下是一个数组在内存中的表示:
这样的话, 数组既可以是对象, 也可以不是对象。至于到底是不是把数组当做对象,全凭Java的设计者决定。数组到底是不是对象, 通过代码验证:
int[] a = new int[4]; &
//a. &//对属性的引用不能当成语句 &
int len = a. &//数组中保存一个字段, 表示数组的长度 &
//以下方法说明数组可以调用方法,java中的数组是对象.这些方法是Object中的方法,所以可以肯定,数组的最顶层父类也是Object &
a.clone(); &
a.toString(); &
在数组a上, 可以访问他的属性,也可以调用一些方法。这基本上可以认定,java中的数组也是对象,它具有java中其他对象的一些基本特点:封装了一些数据,可以访问属性,也可以调用方法。所以,数组是对象。
而在C++中,数组虽然封装了数据,但数组名只是一个指针,指向数组中的首个元素,既没有属性,也没有方法可以调用。如下代码所示:
int main(){ &
& & int a[] = {1, 2, 3, 4}; &
& & int* pa = &
& & //无法访问属性,也不能调用方法。 &
& & return 0; &
所以C++中的数组不是对象,只是一个数据的集合,而不能当做对象来使用。
Java中数组的类型
Java是一种强类型的语言。既然是对象, 那么就必须属于一个类型,比如根据Person类创建一个对象,这个对象的类型就是Person。那么数组的类型是什么呢?看下面的代码:
int[] a1 = {1, 2, 3, 4}; &
System.out.println(a1.getClass().getName()); &
//打印出的数组类的名字为[I &
String[] s = new String[2]; &
System.out.println(s.getClass().getName()); &
//打印出的数组类的名字为 &[Ljava.lang.S &
String[][] ss = new String[2][3]; &
System.out.println(ss.getClass().getName()); &
//打印出的数组类的名字为 & &[[Ljava.lang.S &
打印出a1的类型为[ I ,s 的类型是[Ljava.lang.S &, &ss的类型是[[Ljava.lang.S &
所以,数组也是有类型的。只是这个类型显得比较奇怪。你可以说a1的类型是int[],这也无可厚非。但是我们没有自己创建这个类,也没有在Java的标准库中找到这个类。也就是说不管是我们自己的代码,还是在JDK中,都没有如下定义:
public class int[] { &
& & // ... &
& & // ... &
& & // ... &
这只能有一个解释,那就是自动创建了数组类型,可以把数组类型和8种基本数据类型一样, 当做java的内建类型。这种类型的命名规则是这样的:
每一维度用一个[表示;开头两个[,就代表是二维数组。
* [后面是数组中元素的类型(包括基本数据类型和引用数据类型)
在java语言层面上,s是数组,也是一个对象,那么他的类型应该是String[],这样说是合理的。但是在JVM中,他的类型为[java.lang.String。顺便说一句普通的类在JVM里的类型为 包名+类名,也就是全限定名。同一个类型在java语言中和在虚拟机中的表示可能是不一样的。
Java中数组的继承关系
上面已经验证了,数组是对象,也就是说可以以操作对象的方式来操作数组。并且数组在虚拟机中有它特别的类型。既然是对象,遵循Java语言中的规则 -- Object是上帝, 也就是说所有类的顶层父类都是Object。数组的顶层父类也必须是Object,这就说明数组对象可以向上直接转型到Object,也可以向下强制类型转换,也可以使用instanceof关键字做类型判定。 这一切都和普通对象一样。如下代码所示:
//1 & & 在test1()中已经测试得到以下结论: 数组也是对象, 数组的顶层父类是Object, 所以可以向上转型 &
int[] a = new int[8]; &
Object obj = //数组的父类也是Object,可以将a向上转型到Object &
//2 & & 那么能向下转型吗? &
int[] b = (int[]) &//可以进行向下转型 &
//3 & & 能使用instanceof关键字判定吗? &
if(obj instanceof int[]){ &//可以用instanceof关键字进行类型判定 &
& & System.out.println(&obj的真实类型是int[]&); &
Java中数组的另一种&继承&关系
如下代码是正确的,却很容易让我们疑惑:
String[] s = new String[5]; &
Object[] obja = & //成立,说明可以用Object[]的引用来接收String[]的对象 &
Object[]类型的引用可以指向String[]类型的数组对象? 由上文的验证可以得知数组类型的顶层父类一定是Object,那么上面代码中s的直接父类是谁呢?难道说String[]继承自Object[],而Object[]又继承自Object? 让我们通过反射的方式来验证这个问题:
//5 & & 那么String[] 的直接父类是Object[] 还是 Object? &
System.out.println(s.getClass().getSuperclass().getName()); &
//打印结果为java.lang.Object,说明String[] 的直接父类是 Object而不是Object[] &
由代码可知,String[]的直接父类就是Object而不是Object[]。可是Object[]的引用明明可以指向String[]类型的对象。那么他们的继承关系有点像这样:
这样的话就违背了Java单继承的原则。String[]不可能即继承Object,又继承Object[]。上面的类图肯定是错误的。那么只能这样解释:数组类直接继承了Object,关于Object[]类型的引用能够指向String[]类型的对象,这种情况只能是Java语法之中的一个特例,并不是严格意义上的继承。也就是说,String[]不继承自Object[],但是我可以允许你向上转型到Object[],这种特性是赋予你的一项特权。
其实这种关系可以这样表述:如果有两个类A和B,如果B继承(extends)了A,那么A[]类型的引用就可以指向B[]类型的对象。如下代码所示:
public static class Father { &
public static class Son extends Father { &
//6 & 下面成立吗? &Father是Son的直接父类 &
Son[] sons = new Son[3]; &
Father[] fa = &//成立 &
//7 & & 那么Son[] 的直接父类是Father[] 还是 &Object[] 或者是Object? &
System.out.println(sons.getClass().getSuperclass().getName()); &
//打印结果为java.lang.Object,说明Son[]的直接父类是Object &
上面的结论可以扩展到二维数组和多维数组:
Son[][] sonss = new Son[2][4]; &
Father[][] fathers = &
上面的代码可以这样理解:
将Father[][]数组看成是一维数组, 这是个数组中的元素为Father[],将Son[][]数组看成是一维数组, 这是个数组中的元素为Son[],因为Father[]类型的引用可以指向Son[]类型的对象,所以,根据上面的结论,Father[][]的引用可以指向Son[][]类型的对象。
数组的这种用法不能作用于基本类型数据:
int[] aa = new int[4]; &
//Object[] objaa = &//错误的,不能通过编译 &
这是错误的, 因为int不是引用类型,Object不是int的父类,在这里自动装箱不起作用。但是这种方式是可以的:
Object[] objss = {&aaa&, 1, 2.5}; &
这种情况下自动装箱可以工作,也就是说,Object数组中可以存放任何值,包括基本数据类型。
Java为什么会为数组提供这样一种语法特性呢?也就是说这种语法有什么作用?编写过中Sqlite操作程序的同学可能发现过这种现象,用一个Object[]引用接收所有的数组对象,在编译SQL语句时,为SQL语句中的占位符提供对应的值。
db.execSQL(&INSERT INTO person VALUES (NULL, ?, ?)&, new Object[]{person.name, person.age}); &&
所以这种特性主要是用于方法中参数的传递。如果不传递数组,而是依次传递各个值,会使方法参数列表变得冗长。如果使用具体的数组类型,如String[],那么就限定了类型,失去了灵活性。所以传递数组类型是一种比较好的方式。但是如果没有上面的数组特性(如果有两个类A和B,如果B继承(extends)了A,那么A[]类型的引用就可以指向B[]类型的对象),那么数组类型就只能通过Object类型接收,这样就无法在方法内部访问或遍历数组中的各个元素。如下代码:
private static void test3() { &
& & String[] a = new String[3]; &
& & doArray(a); &
private static void doArray(Object[] objs){ &
private static void doArray1(Object obj){ &
& & //不能用Object接收数组,因为这样无法对数组的元素进行访问 &
& & // obj[1] &//错误 &
& & //如果在方法内部对obj转型到数组,存在类型转换异常的风险 &
& & // Object[] objs = (Object[]) &
private static void doArray2(String[] strs){ &
& & //如果适用特定类型的数组,就限制了类型,失去灵活性和通用性 &
private static void doArray3(String name, int age, String id, float account){ &
& & //如果不适用数组而是依次传递参数,会使参数列表变得冗长,难以 &
到此为止,数组的特性就总结完了。上文中加粗的部分为重要结论。下面贴出整个:
package com.pansoft.zhangjg. &
public class ArrayTest { &
& & &* @param args&
& & public static void main(String[] args) { &
& & & & test1(); &
& & & & test2(); &
& & & & test3(); &
& & &* 数组具有这种特性:&
& & &* 如果有两个类A和B,如果B继承(extends)了A,那么A[]类型的引用就可以指向B[]类型的对象&
& & &* 测试数组的特殊特性对参数传递的便利性&
& & private static void test3() { &
& & & & String[] a = new String[3]; &
& & & & doArray(a); &
& & private static void doArray(Object[] objs){ &
& & & & &&
& & private static void doArray1(Object obj){ &
& & & & //不能用Object接收数组,因为这样无法对数组的元素进行访问 &
& & & & // obj[1] &//错误 &
& & & & &&
& & & & //如果在方法内部对obj转型到数组,存在类型转换异常的风险 &
& & & & // Object[] objs = (Object[]) &
& & private static void doArray2(String[] strs){ &
& & & & //如果适用特定类型的数组,就限制了类型,失去灵活性和通用性 &
& & private static void doArray3(String name, int age, String id, float account){ &
& & & & //如果不适用数组而是依次传递参数,会使参数列表变得冗长,难以阅读 &
& & &* 测试数组的集成关系, 并且他的继承关系是否和数组中元素的类型有关&
& & private static void test2() { &
& & & & &&
& & & & //1 & & 在test1()中已经测试得到以下结论: 数组也是对象, 数组的顶层父类是Object, 所以可以向上转型 &
& & & & int[] a = new int[8]; &
& & & & Object obj = //数组的父类也是Object,可以将a向上转型到Object &
& & & & &&
& & & & //2 & & 那么能向下转型吗? &
& & & & int[] b = (int[]) &//可以进行向下转型 &
& & & & &&
& & & & //3 & & 能使用instanceof关键字判定吗? &
& & & & if(obj instanceof int[]){ &//可以用instanceof关键字进行类型判定 &
& & & & & & System.out.println(&obj的真实类型是int[]&); &
& & & & } &
& & & & &&
& & & & //4 & & 下面代码成立吗? &
& & & & String[] s = new String[5]; &
& & & & Object[] obja = & //成立,说明可以用Object[]的引用来接收String[]的对象 &
& & & & &&
& & & & //5 & & 那么String[] 的直接父类是Object[] 还是 Object? &
& & & & System.out.println(s.getClass().getSuperclass().getName()); &
& & & & //打印结果为java.lang.Object,说明String[] 的直接父类是 Object而不是Object[] &
& & & & &&
& & & & //6 & 下面成立吗? &Father是Son的直接父类 &
& & & & Son[] sons = new Son[3]; &
& & & & Father[] fa = &//成立 &
& & & & &&
& & & & //7 & & 那么Son[] 的直接父类是Father[] 还是 &Object[] 或者是Object? &
& & & & System.out.println(sons.getClass().getSuperclass().getName()); &
& & & & //打印结果为java.lang.Object,说明Son[]的直接父类是Object &
& & & & &&
& & & & /**&
& & & & &* 做一下总结, 如果A是B的父类, 那么A[] 类型的引用可以指向 B[]类型的变量&
& & & & &* 但是B[]的直接父类是Object, 所有数组的父类都是Object&
& & & & &*/ &
& & & & &&
& & & & //8 & & 上面的结论可以扩展到二维数组 &
& & & & Son[][] sonss = new Son[2][4]; &
& & & & Father[][] fathers = &
& & & & //将Father[][]数组看成是一维数组, 这是个数组中的元素为Father[] &
& & & & //将Son[][]数组看成是一维数组, 这是个数组中的元素为Son[] &
& & & & //因为Father[]类型的引用可以指向Son[]类型的对象 &
& & & & //所以,根据上面的结论,Father[][]的引用可以指向Son[][]类型的对象 &
& & & & &&
& & & & /**&
& & & & &* 扩展结论:&
& & & & &* 因为Object是所有引用类型的父类&
& & & & &* 所以Object[]的引用可以指向任何引用数据类型的数组的对象. 如:&
& & & & &* Object[] objs = new String[1];&
& & & & &* Object[] objs = new Son[1];&
& & & & &*&
& & & & &*/ &
& & & & &&
& & & & //9 & & 下面的代码成立吗? &
& & & & int[] aa = new int[4]; &
& & & & //Object[] objaa = &//错误的,不能通过编译 &
& & & & //这是错误的, 因为Object不是int的父类,在这里自动装箱不起作用 &
& & & & &&
& & & & //10 & &这样可以吗? &
& & & & Object[] objss = {&aaa&, 1, 2.5};//成立 &
& & &* 测试在java语言中,数组是不是对象&
& & &* 如果是对象, 那么他的类型是什么?&
& & private static void test1() { &
& & & & int[] a = new int[4]; &
& & & & //a. &//对属性的引用不能当成语句 &
& & & & int len = a. &//数组中保存一个字段, 表示数组的长度 &
& & & & &&
& & & & //以下方法说明数组可以调用方法,java中的数组是对象.这些方法是Object中的方法,所以可以肯定,数组的最顶层父类也是Object &
& & & & a.clone(); &
& & & & a.toString(); &
& & & & &&
& & & & &&
& & & & /**&
& & & & &* java是强类型的语言,一个对象总会有一个特定的类型,例如 Person p = new Person();&
& & & & &* 对象p(确切的说是引用)的类型是Person类, 这个Person类是我们自己编写的&
& & & & &* 那么数组的类型是什么呢? 下面使用反射的方式进行验证&
& & & & &*/ &
& & & & int[] a1 = {1, 2, 3, 4}; &
& & & & System.out.println(a1.getClass().getName()); &
& & & & //打印出的数组类的名字为[I &
& & & & &&
& & & & String[] s = new String[2]; &
& & & & System.out.println(s.getClass().getName()); &
& & & & //打印出的数组类的名字为 &[Ljava.lang.S &
& & & & &&
& & & & String[][] ss = new String[2][3]; &
& & & & System.out.println(ss.getClass().getName()); &
& & & & //打印出的数组类的名字为 & &[[Ljava.lang.S &
& & & & &&
& & & & /**&
& & & & &* 所以,数组也是有类型的,只不过这个类型不是有程序员自己定义的类, 也不是jdk里面&
& & & & &* 的类, 而是虚拟机在运行时专门创建的类&
& & & & &* 类型的命名规则是:&
& & & & &* & & &每一维度用一个[表示;&
& & & & &* & & &[后面是数组中元素的类型(包括基本数据类型和引用数据类型)&
& & & & &* &
& & & & &* 在java语言层面上,s是数组,也是一个对象,那么他的类型应该是String[],&
& & & & &* 但是在JVM中,他的类型为[java.lang.String&
& & & & &* &
& & & & &* 顺便说一句普通的类在JVM里的类型为 包名+类名, 也就是全限定名&
& & & & &*/ &
& & public static class Father { &
& & public static class Son extends Father { &java版的俄罗斯方块问题。定义方块的形状那个数组和生成新方块的方法没看懂,有高人解释下不?_百度知道
java版的俄罗斯方块问题。定义方块的形状那个数组和生成新方块的方法没看懂,有高人解释下不?
//方块的形状第一组代表方块类型有S、Z、L、J、I、O、T7种第二组代表旋转几次第三四组为方块矩阵privatefinalintshapes[][][]=newint[][][]{//i{{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{...
// 方块的形状 第一组代表方块类型有S、Z、L、J、I、O、T 7种 第二组 代表旋转几次 第三四组为 方块矩阵private final int shapes[][][] = new int[][][] {
{ { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },
{ { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
{ { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }
}; // 生成新方块的方法 public void newblock() {
blockType = (int) (Math.random() * 1000) % 7;
turnState = (int) (Math.random() * 1000) % 4;
if (gameover(x, y) == 1) {
drawwall();
score = 0;
JOptionPane.showMessageDialog(null, &GAME OVER&);
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
chenhaiyang108知道合伙人
chenhaiyang108
采纳数:36
获赞数:280
/** 定义方块的形状那个数组和生成新方块的方法没看懂 */下面这个是(三维数据)shapes中的一个二维元素
{ { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },第一行{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 } 画出的图形为:(0代表&,1代表O)& & & &O O O O& & & && & & &第二行{0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}& O & && O & && O & && O & &从上面两个你应该就可以看出这个数组存储各种方块的方式了。blockType = (int) (Math.random() * 1000) % 7;
turnState = (int) (Math.random() * 1000) % 4;这里取的7和4的原因是这个三维数组的两个维度的大小是7和4,7种类型的图形,和每个图形的4种形态反映到数组上就是newShape[] = shapes[blockType][State] ;
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 关于java数组的扩容问题 的文章

更多推荐

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

点击添加站长微信