我有一個 base-n 轉換器,我希望它以 4 位塊(1111 -> 1111、101 -> 0101、110101 -> 00110101)輸出所有值。為此,我在 vscode 中制作了這篇文章以嘗試使其作業。
using System;
namespace Test
{
using static intUtilities;
class Program
{
static void Main(string[] args)
{
string number = "";
int[] wholenumbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(;;)
{
Console.WriteLine("enter binary number");
number = Console.ReadLine();
Console.WriteLine("is number length divisible by 4? " Contains(wholenumbers, number.Length/4f));
Console.WriteLine(number.Length/4f);
while(!Contains(wholenumbers, number.Length/4f))
{
number = "0" number;
}
Console.WriteLine(number);
Console.ReadLine();
}
}
}
public class intUtilities
{
public static bool Contains(int[] array, float number)
{
foreach(int i in array)
{
if(i == number)
{
return true;
}
else {return false;}
}
return false;
}
}
}
對于輸入 111,我期待輸出 0111,這確實發生了,但是如果我輸入 111111,我期待 00111111,但沒有輸出。執行 while 回圈時,它應該捕捉 numbers.Length / 4 為“2”的時刻(即有 8 位數字)并打破回圈,但由于某種原因,它不會并繼續向細繩。它甚至在某些時候將 numbers.Length / 4 讀出為“2”,但不會中斷回圈。該代碼似乎僅適用于 4 位數的目標大小,其中 numbers.Length / 4 將為“1”。有沒有辦法糾正它?甚至更簡單的解決方法?
uj5u.com熱心網友回復:
此代碼存在許多“有趣”的問題,但要回答您的直接問題,您需要洗掉該else {return false;}行。這可以防止您搜索wholeNumbers陣列中的每個元素 - 或者更具體地說,您只查詢wholeNumbers陣列中的第一個元素(即 value 1),這就是為什么代碼僅適用于第一個 4 位二進制數字塊的原因。
本著您的方法的精神,可能的實作是:
void Main()
{
string number = "";
Console.WriteLine("enter binary number");
number = Console.ReadLine();
while (number.Length % 4 != 0)
{
number = "0" number;
}
Console.WriteLine(number);
}
uj5u.com熱心網友回復:
Phillip Ngan 回答了最初的問題(“為什么這不起作用”)。僅供參考,可以在沒有回圈的簡單計算中得到正確的結果:
void Main
{
Console.WriteLine("enter binary number");
string number = Console.ReadLine();
int padLength = (4 - (number.Length % 4)) % 4;
number = "000".Substring(0, padLength) number;
Console.WriteLine(number);
}
編輯:剛剛注意到這只是 John Glenn 提出的解決方案的一個變體。
uj5u.com熱心網友回復:
甚至更簡單的解決方法?
依靠“整數,除以 N,加一和乘以 N”的通常“將整數四舍五入到最接近的 N”,我們可以使用它來將二進制字串的左側填充到下一個“4 的倍數”從當前長度向上
var x= "01111";
var y = x.PadLeft(((x.Length/4) 1)*4, '0');
y 是“00001111”;
如果你不喜歡所有的括號,你可以使用優先級來達到同樣的效果
.PadLeft(x.Length/4*4 4, '0');
希望大多數未來的代碼讀者會記得他們的高中數學課??
uj5u.com熱心網友回復:
您可以使用模數函式來確定一個數字(字串長度)除以另一個數字 (4) 的余數。整個效果可以簡化為:
// find how many characters don't fit into a block of four
int leftovers = numbers.Length % 4;
// determine how many numbers to pad
int padding =
(4 - leftovers) // this is the number of characters we have to add to get an even group of 4
% 4; // this will ensure that if leftovers is 0, then instead of padding 4 characters we don't pad any
// pad the string
string displayMe = numbers.PadLeft(numbers.Length padding, '0');
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419874.html
標籤:
上一篇:TrueANDFalse或FalseANDTrue更優雅的條件型別?
下一篇:使用c#每分鐘回圈一次
