具有可调数组大小的 toString 方法
toString method with adjustable Array size
我看过的每个来源要么不理解,要么似乎不适用,要么使用类似数组列表的东西。我对那些不熟悉。所以我想使用一个基本的 toString 方法打印出数组的索引以及与变量 'length' 相比所持有的数字 - num.length 可能不同,因为这是物理大小底层数组。底部的 for 循环有它的要点。我正在尝试使用可调整大小数组中保存的 int 打印出索引(0-无限)。变量 'length' 不是数组的实际大小,而是在添加另一个单元格之前包含 0 的工作大小。 'strang' 变量只是我尝试过的。我不认为它会起作用,但其他任何我似乎都没有帮助的东西,因为我被困住了。
public class XArray
{
private int[] nums;
private int length;
public XArray()
{
nums = new int[10];
length = 0;
}
public void add(int value)
{
if (length == nums.length)
{
int[] nums2 = new int[(int)(nums.length * 1.2)];
for ( int i = length - 1; i >= 0; i-- )
{
nums2[i] = nums[i];
}
nums = nums2;
}
nums[length] = value;
length++;
}
public void set(int index, int value)
{
if (index < length)
{
nums[index] = value;
}
}
public int get(int index)
{
return nums[index];
}
public int size()
{
return length;
}
public void remove()
{
nums[length - 1] = 0;
length--;
}
public String toString(int[] nums)
{
String strang = "l";
for ( int i = 0 ; i < length; i++ )
{
strang = "Index: " + i + " Number: " + nums[i] + ", ";
}
return strang;
}
}
您可能打算在该方法中使用 +=
而不是 =
(尽管许多人会告诉您使用 StringBuilder
,因为如果编译器未优化连续连接`会产生很多垃圾)。
另外,不要传入nums
!您要使用字段 nums
;传入参数将使用该参数。 real toString
没有参数(应该有一个 @Override
注释)。
您需要在循环的每次迭代中连接值...类似于...
public String toString(int[] nums)
{
StringBuilder strang = new StringBuilder(length);
for ( int i = 0 ; i < length; i++ )
{
strang.append("Index: ").append(i).append(" Number: ").append(nums[i]).append(", ");
}
return strang.toString();
}
一般来说,toString
不应该带参数,nums
和length
之间会有差异,这可能会导致问题
@Override
public String toString() {...
这样,您将打印对象 num
数组的内容,该数组与 length
上下文关联
我看过的每个来源要么不理解,要么似乎不适用,要么使用类似数组列表的东西。我对那些不熟悉。所以我想使用一个基本的 toString 方法打印出数组的索引以及与变量 'length' 相比所持有的数字 - num.length 可能不同,因为这是物理大小底层数组。底部的 for 循环有它的要点。我正在尝试使用可调整大小数组中保存的 int 打印出索引(0-无限)。变量 'length' 不是数组的实际大小,而是在添加另一个单元格之前包含 0 的工作大小。 'strang' 变量只是我尝试过的。我不认为它会起作用,但其他任何我似乎都没有帮助的东西,因为我被困住了。
public class XArray
{
private int[] nums;
private int length;
public XArray()
{
nums = new int[10];
length = 0;
}
public void add(int value)
{
if (length == nums.length)
{
int[] nums2 = new int[(int)(nums.length * 1.2)];
for ( int i = length - 1; i >= 0; i-- )
{
nums2[i] = nums[i];
}
nums = nums2;
}
nums[length] = value;
length++;
}
public void set(int index, int value)
{
if (index < length)
{
nums[index] = value;
}
}
public int get(int index)
{
return nums[index];
}
public int size()
{
return length;
}
public void remove()
{
nums[length - 1] = 0;
length--;
}
public String toString(int[] nums)
{
String strang = "l";
for ( int i = 0 ; i < length; i++ )
{
strang = "Index: " + i + " Number: " + nums[i] + ", ";
}
return strang;
}
}
您可能打算在该方法中使用 +=
而不是 =
(尽管许多人会告诉您使用 StringBuilder
,因为如果编译器未优化连续连接`会产生很多垃圾)。
另外,不要传入nums
!您要使用字段 nums
;传入参数将使用该参数。 real toString
没有参数(应该有一个 @Override
注释)。
您需要在循环的每次迭代中连接值...类似于...
public String toString(int[] nums)
{
StringBuilder strang = new StringBuilder(length);
for ( int i = 0 ; i < length; i++ )
{
strang.append("Index: ").append(i).append(" Number: ").append(nums[i]).append(", ");
}
return strang.toString();
}
一般来说,toString
不应该带参数,nums
和length
之间会有差异,这可能会导致问题
@Override
public String toString() {...
这样,您将打印对象 num
数组的内容,该数组与 length