黑马程序员技术交流社区
标题:
关于重载的问题
[打印本页]
作者:
王晨宇
时间:
2012-6-11 15:01
标题:
关于重载的问题
我在编辑了一断代码之后,我想让变量重载。
比如说,我编辑了一段代码,int[] arr={3,6,5,1,8,9,};
class j0611//遍历数组的值
{
public static void main(String[] args)
{
int sum=0;
System.out.println("length:"+arr.length);for (int x=0;x<arr.length ;x++ )
{System.out.println("arr["+x+"]="+arr[x]+";");sum +=arr[x];
}System.out.println(sum);
print(arr);
print(arr);
print(arr);
print(arr); //到了这里。我感到很爽。
print99(arr); //我想重载变量arr。赋给他一个更长的数组。
//int[]arr={5,6,5,5,1,2,3,5,2,2,6,,2,2};
//思路,使用int赋值,失败。
//思路,使用函数赋值,报错。
//思路,int arr=null。不报错。但是与需求不相符。
/*
public static void print99(int[]arr)
{
int[]arr={5,6,5,5,1,2,3,5,2,2,6,6,2,2};
for (int x=0;x<arr.length ;x++ )
{
if(x!=arr.length-1)
System.out.print(arr[x]+"、");
else
System.out.println(arr[x]);
}
}
*/
}
public static void print(int [] arr)
{
for (int x=0;x<arr.length ;x++ )
{
if(x!=arr.length-1)
System.out.print(arr[x]+"、");
else
System.out.println(arr[x]);
}
}
}
求高手给意见。
作者:
赵兵锋
时间:
2012-6-11 15:52
public static void main(String[] args) {
int[] arr = { 3, 6, 5, 1, 8, 9, };
int sum = 0;
System.out.println("length:" + arr.length);
for (int x = 0; x < arr.length; x++) {
System.out.println("arr[" + x + "]=" + arr[x] + ";");
sum += arr[x];
}
System.out.println(sum);
print(arr);
print99(new int[] { 5, 6, 5, 5, 1, 2, 3, 5, 2, 2, 6, 2, 2 });
}
public static void print99(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
System.out.print(arr[x] + "、");
else
System.out.println(arr[x]);
}
}
public static void print(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
System.out.print(arr[x] + "、");
else
System.out.println(arr[x]);
}
}
复制代码
作者:
陈剑华
时间:
2012-6-11 16:14
本帖最后由 陈剑华 于 2012-6-11 16:16 编辑
class j0611// 遍历数组的值
{
public static void main(String[] args) {
int[] arr = { 3, 6, 5, 1, 8, 9, };
int sum = 0;
System.out.println("length:" + arr.length);
for (int x = 0; x < arr.length; x++) {
System.out.println("arr[" + x + "]=" + arr[x] + ";");
sum += arr[x];
}
System.out.println(sum);
print(arr);
print99(arr); // 重载变量arr。赋给他一个更长的数组。
}
public static void print99(int[] arr) {
arr = new int[]{ 5, 6, 5, 5, 1, 2, 3, 5, 2, 2, 6, 6, 2, 2 };
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
System.out.print(arr[x] + "、");
else
System.out.println(arr[x]);
}
}
public static void print(int[] arr) {
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
System.out.print(arr[x] + "、");
else
System.out.println(arr[x]);
}
}
}
复制代码
输出结果是:
length:6
arr[0]=3;
arr[1]=6;
arr[2]=5;
arr[3]=1;
arr[4]=8;
arr[5]=9;
32
3、6、5、1、8、9
5、6、5、5、1、2、3、5、2、2、6、6、2、2
你有两个地方错了;
第一.在print99方法里面,你试图重新定义一个重名的arr数值变量,这是不允许的,会和你函数参数名冲突;应把arr前面的int去掉;
arr = { 5, 6, 5, 5, 1, 2, 3, 5, 2, 2, 6, 6, 2, 2 };//这样是会报异常的,就是错的第二点,这样的数组常量,只能用来数组的初始化,而显然arr显然之前就初始化过了,所以这里要改为:
arr = new int[]{ 5, 6, 5, 5, 1, 2, 3, 5, 2, 2, 6, 6, 2, 2 };
希望可以解决你的问题。{:soso_e100:}
作者:
郭宁
时间:
2012-6-11 16:41
/*我也来说说自己的意见吧,
* 首先说下我对楼主问题的理解:
* 楼主定义了一个 int[] arr,
* 想通过函数print99(int[]arr) 改变arr的长度;
*
* 楼上的方法都是无法实现的。
* 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递。
* 与其他语言不同,Java不允许程序员选择按值传递还是按引用传递各个参数,
* 基本类型(byte--short--int--long--float--double--boolean--char)的变量总是按值传递。
* 就对象而言,不是将对象本身传递给方法,而是将对象的的引用或者说对象的首地址传递给方法,
* 引用本身是按值传递的-----------也就是说,讲引用的副本传递给方法(副本就是说明对象此时有两个引用了),
* 通过对象的引用,方法可以直接操作该对象(当操作该对象时才能改变该对象,而操作引用时源对象是没有改变的)。
*
* 简单点说,不管你print99(int[]arr)传的参数名是否跟你定义的 arr相同,都会创建一个副本(且叫局部引用好了),
* 局部引用跟原始引用指向同一内存地址,所以再函数内对数组的改值操作 例:
* public void print99(int[]arr)
* {
* for (int x=0;x<arr.length ;x++ )
* arr[x]++;
* }
* 会修改原始数组的值;
* 若是如下操作:
* arr = new int[]{5,6,5,5,1,2,3,5,2,2,6,6,2,2};
* 只是改变了副本引用指向的地址,并不会改变原始引用指向的地址,所以,原始arr还是={3,6,5,1,8,9,};
*
* 这样看来 要想改变数组长度,就要避免创建 副本引用。
* 大家可以讨论一下怎么避免创建 副本引用!
* 方法一:
* 不传参 public void print99() 显然没有扩展性
* */
作者:
王广丛
时间:
2012-6-12 01:28
其实int数组初生命的时候就规定了其大小,如果非要改变其大小,就要重新new一个数组然后赋值给它,如:int[] myArray = new int[6];
myArray = new int[10];
但是如果想动态的改变数组大小,楼主可以使用List来实现,如List<Integer> list = new ArrayList<Integer>();因为范型不支持基本数据类型,
所以只能用Integer,这样就可以动态的改变其大小
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2