我有一种方法可以将dec转换为bin
QList<bool> widgetInput::decToBin(int number)
{
int remainder;
QList<bool> result;
if(number <= 1) {
result << number;
return result;
}
remainder = number%2;
decToBin(number >> 1);
result << remainder;
}
但遗憾的是,此方法仅在列表中包含一个元素。 但当我用“cout&lt;&lt; number”替换“result&lt;&lt; number”时 它会工作。 你能帮帮我,让我知道我的确切问题在哪里吗?
问候。
答案 0 :(得分:2)
你非常接近,但你需要进行一次修改:
remainder = number%2;
result << remainder << decToBin(number >> 1);
return result;
我不确定QList究竟是如何工作的,但上述内容旨在将decToBin()
的结果附加到结果中remainder
之后。您可能需要稍微修改它才能使其正常工作。
结果将包含数字的二进制表示,以“反向”顺序(列表的第一个位置中的最低有效位)。
答案 1 :(得分:2)
在每个递归步骤中,您将创建一个新的QList结果;这是该步骤的本地,然后将其余部分插入其中。您不需要递归(通常在迭代时应该避免递归):
QList<bool> result;
while(number > 0) {
result << number%2;
number /=2;
}
// Edited to add: Just realized you would also have to reverse QList here.
// Depends on it's interface.
return result;
或更好,只需使用标准容器:
bitset<sizeof(int)*CHAR_BIT> bs(number);
答案 2 :(得分:1)
首先为什么要让它递归?
正如其他人所指出的,result
变量是本地变量,因此每次调用该方法时它都会“重置”。
因为计算机是二进制动物,所以我会改为:
QList<bool> widgetInput::decToBin(int number)
{
QList<bool> result = new QList<bool>();
while (number)
{
result.Add(number & 1);
number = number >> 1;
}
return result;
}
答案 3 :(得分:0)
QList<bool> result;
是一个局部变量,因此在此方法调用中只能插入值。它只有一个。
解决方案很少:
但是这些解决方案具有相反的顺序,因此您可以选择更适合您的解决方案。
顺便说一句,你在方法结束时缺少返回值。所以编译器应该发布警告。
答案 4 :(得分:0)
有一个更通用的迭代解决方案(不需要Qt):
NB1:您可以忽略“字节完成”部分以及“#include”。它只是用零来完成字符串,总是得到多个8位......
NB2:Utils是实现这些功能的类的名称......有人告诉我,标准库中已存在反向功能......尚未尝试过。
NB3:如果你没有反转字符串,小端将首先出现......所以正常情况是littleEndianFirst = false
public class CustomListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<RowItem> rowItemList;
private final int VIEW_TYPE_CUSTOM = 0;
private final int VIEW_TYPE_NORMAL = 1;
NewPagerAdapter mCustomPagerAdapter;
public CustomListAdapter(Context context, List<RowItem> rowItemList) {
this.context = context;
this.rowItemList = rowItemList;
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return VIEW_TYPE_CUSTOM;
else
return VIEW_TYPE_NORMAL;
}
@Override
public int getItemCount() {
return rowItemList.size()+1;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case VIEW_TYPE_CUSTOM:
recViewHolder1 viewHolderSecond = (recViewHolder1) holder;
mCustomPagerAdapter = new NewPagerAdapter(getSupportFragmentManager());
viewHolderSecond.vPager.setAdapter(mCustomPagerAdapter);
break;
case VIEW_TYPE_NORMAL:
recViewHolder2 viewHolderFirst = (recViewHolder2) holder;
RowItem rowItem = rowItemList.get(position-1);
viewHolderFirst.vName.setText(rowItem.getName());
viewHolderFirst.vImage.setImageResource(rowItem.getImageId());
break;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_CUSTOM:
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.pagerlayout, parent, false);
return new recViewHolder1(itemView);
case VIEW_TYPE_NORMAL:
View itemView1 = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.rowlayout, parent, false);
return new recViewHolder2(itemView1);
}
return null;
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public static class recViewHolder1 extends RecyclerView.ViewHolder {
protected static ViewPager vPager;
public recViewHolder1(View v) {
super(v);
vPager = (ViewPager) v.findViewById(R.id.vPager);
}
}
public class recViewHolder2 extends RecyclerView.ViewHolder implements View.OnClickListener {
protected TextView vName;
protected ImageView vImage;
public recViewHolder2(View v) {
super(v);
v.setOnClickListener(this);
vName = (TextView) v.findViewById(R.id.vName);
vImage = (ImageView) v.findViewById(R.id.vImage);
} } }