我遇到了一个问题,我需要把十进制数转换成二进制数,然后把这些位存储在一个链表中,链表的头节点是最高有效位,最后一个节点是最低有效位。解决这个问题本身其实很容易,因为你只需要递归地取2的模,然后把结果加到链表中,直到十进制数变成0。
我遇到的问题是我必须编写函数,使其返回一对数字,(无论是数组还是列表)最高有效位和最后有效位。即:在函数中输入14将返回(1,0),因为14在二进制中是1110。
我可以轻松访问MSB和LSB(getFirst()、getLast())。
该函数只能接受一个十进制数参数。
目前我有这个当前代码:
public static void encodeBin(int n) {
if(n == 0) return; //Base case
else {
if(n % 2 == 0)
theList.addFirst(0);
else
theList.addFirst(1);
encodeBin(n / 2);
}
// return?
}
问题是我不知道如何返回这两个值。有一个返回值意味着我不能自己调用encodeBin()。
另外,我应该在哪里创建列表呢?如果我在函数的最开始放置类似于List<Integer> = new LinkedList<Integer>()
的内容,那么每次函数调用自己时,它都会创建一个新的列表,并在新列表中添加不是原来正确的位?(从第一次调用函数时创建的列表)
有人知道怎么解决这个问题吗?
3条答案
按热度按时间wnavrhmk1#
您不能返回2个值。您必须返回包含这2个值的某个对象。可以是数组,也可以是某个新对象,这取决于您的家庭作业要求以及此函数的使用位置。
对于链表的创建,你需要一个递归的helper方法。你的public方法将被用来初始化你的对象,开始递归,并返回你的结果。这允许你的递归函数有一个以上的参数。
nnvyjq4y2#
不能分别返回两个值。但是,可以返回一个包含第一位和最后一位的数组 * 或者 * 创建自己的类来保存这些数据,并返回该类的一个示例。
而关于名单,我看到两个选项:
1.使其成为
static
类变量1.使它成为函数的一个参数(尽管我看到你说你不能这样做)。
第一种方法如下所示:
第二种方法如下所示:
然后你可以做一些事情
且
theList
将根据需要保持适当的位。需要注意的是,您可能需要考虑使用 * 布尔值 * 列表而不是 * 整数 * 列表,其中
true
表示1
,false
表示0
。enyaitl33#
我建议声明两个方法:
(1)(2)私有静态空编码Bin(链接列表,int n)
public方法只创建一个空列表,然后调用private版本,将空列表和原始输入n作为参数传递
就像这样: