我正在编写一个类作为一个赋值,我正在努力研究类中的一个函数。该类称为PowerArray,并且出于问题的目的,它具有两个实例变量,一个是称为数据的内部数组。另一个是伯爵。数据可以包含20,但计数会跟踪数组的当前长度。既然背景已经存在,问题就在于,我正在尝试在数组的前面添加一个字符,但我似乎无法让它工作。我目前的努力低于
public int addFront(char ch)
{
if(count<MAX)
{
for(int i = 0; i<count; i++)
{
data[i] = data[i+1];
}//for
data[0] = ch;
count++;
return 0;
}//if
else
return 1;
} //addFront(char)
P.S:Max是数据数组的最大大小,因此它是数组的真实大小。另外,在这种情况下,我并不担心会出现溢出,我根本就不想预先形成这个功能。
答案 0 :(得分:1)
应该是:
for (int i = count-1; i >= 0; i--)
{
data[i+1] = data[i]
}
现在你正在改变你的角色。
如果您的初始数组是[&#39; a&#39;,&#39; b&#39;,&#39; c&#39;,&#39; d&#39;,null,... ],你的for循环会这样做:
// count = 4
data[0] = data[1] // 'b'
data[1] = data[2] // 'c'
data[2] = data[3] // 'd'
data[3] = data[4] // null
让您的阵列成为[&#39; b&#39;,&#39; c&#39;,&#39; d&#39;,null,...]。
通过向另一个方向迭代,你将得到你想要的东西。
答案 1 :(得分:0)
由于您将所有内容都移到右侧,因此您需要从单词的右侧开始。否则,如果您选择abc
并开始将a
向右移动,现在您已经aac
了,在下一步中,您将尝试将第二个字符向右移动......你认为它是b
,但是你的第一步是a
...所以你最终会在整个单词上复制第一个字符。
假设MAX
是一个始终等于数组大小的常量,您的代码应如下所示:
if(count < MAX) {
for(int i = count; i >= 0; --i) {
data[i+1] = data[i];
}
data[0] = ch;
count++; //since we added a character to it
return 0;
} else {
return 1;
}
作为与您遇到的问题无关的说明,您是否愿意解释为什么您的函数返回int
并返回0
或1
? return
是否应该代表字符是否被移位?如果是这样,为什么不返回boolean
?
无论如何,0
评估为false
(如果将其评估为布尔值),而1
将评估为true
,因此它会交换返回的意义(如果移动发生,则返回1
或true
,如果不移动则返回0
或false
。