這是一個從控制臺獲取整數的函式,這部分作業正常。問題在于從陣列中寫入值。
Console.WriteLine("Function get numbers...");
static int[] numbers(int[] values){
for(int ind = 0; ind < 10; ind ){
Console.WriteLine("Type a number: ");
values[ind]= int.Parse(Console.ReadLine());
}
return values;
}
numbers(new int[10]);
for(int s= 1; s < 10; s ){
Console.WriteLine(numbers(new int[s]));
}
我查看了檔案,但沒有找到解決方案。
uj5u.com熱心網友回復:
Console.WriteLine("Function get numbers...");
static int[] numbers(int[] values){
for(int ind = 0; ind < 10; ind ){
Console.WriteLine("Type a number: ");
values[ind]= int.Parse(Console.ReadLine());
}
return values;
}
var values = numbers(new int[10]);
for(int s= 0; s < 10; s ){
Console.WriteLine(values[s].ToString()));
}
我認為這行得通?我沒有嘗試決議它,它似乎
uj5u.com熱心網友回復:
顯示陣列的最簡單方法是將陣列string.Join()的元素組合成一個逗號分隔的字串
int[] array = new int[] { 1,2,3,4,5 };
Console.WriteLine(string.Join(",", array));
結果
1,2,3,4,5
您可以使用Environment.NewLine而不是"," 將每個值放在新行中。
另外,請注意在您的代碼中,您在函式中使用陣列作為引數,它會填充陣列然后回傳它。但是您不需要傳遞陣列,只需傳遞所需的陣列大小
static int[] numbers(int count){
int[] values = new int[count];
for(int ind = 0; ind < 10; ind ){
Console.WriteLine("Type a number: ");
values[ind]= int.Parse(Console.ReadLine());
}
return values;
}
int[] array = numbers(10);
或填寫陣列中已有的許多元素
static void numbers(ref int[] values){
for(int ind = 0; ind < 10; ind ){
Console.WriteLine("Type a number: ");
values[ind]= int.Parse(Console.ReadLine());
}
}
int[] array = new int[10];
numbers(ref array);
取決于您要創建新陣列的次數,或者想要一遍又一遍地重用現有陣列。ref此處不需要關鍵字,因為您始終可以修改陣列的元素,但它是作為約定添加的,以向讀者表明該函式numbers()確實修改了陣列引數。
最后,我將逐行解釋發生了什么,以說明為什么代碼沒有按預期運行
numbers(new int[10]);這將創建一個包含 10 個元素的新陣列并將其傳遞給函式,函式numbers()的結果永遠不會分配給區域變數,因此永遠丟失。for(int s= 1; s < 10; s ){ ... }這是一個回圈 9 次迭代(1 到 9)。Console.WriteLine(numbers(new int[s]));這將創建一個包含s元素的新陣列(同樣是 1 到 9)并將其傳遞給函式。函式的結果被傳遞給WriteLine()方法,其中陣列的默認行為是顯示型別而不是引數的內容。
對上述問題的可能修復是創建一次陣列并在回圈中訪問其元素(使用numbers()上面的第一次更新)
int[] array = numbers(10);
for(int s= 0; s < array.Length; s ){
Console.WriteLine(array[s]);
}
請注意,迭代計數由硬編碼數字 10 驅動,array.Length而不是由硬編碼數字 10 驅動。
uj5u.com熱心網友回復:
這是一個例子:
static void Main(string[] args)
{
int stop = 0;
int[] chosenNum = new int[6];
while (stop == 0)
{
Console.Clear();
string con = "";
Console.WriteLine("Enter six numbers between 1-100 separated by a comma with no duplicates:");
string numbers = Console.ReadLine();
string[] userNumbers = numbers.Replace(" ", "").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToArray();;//remove ex: ,, issues
string[] checkDup = userNumbers.Distinct().ToArray();//remove duplicates
if (userNumbers.Count() < 6)
{
Console.WriteLine("You entered less than six numbers");
Console.WriteLine("Try Again Y or N");
con = Console.ReadLine();
if (con.ToUpper() != "Y")
{
stop = 1;
}
}
else if (userNumbers.Count() > 6)
{
Console.WriteLine("You entered more than 6 numbers");
Console.WriteLine("Try Again Y or N");
con = Console.ReadLine();
if (con.ToUpper() != "Y")
{
stop = 1;
}
}
else if (checkDup.Count() < 6)
{
Console.WriteLine("You entered duplicate numbers");
Console.WriteLine("Try Again Y or N");
con = Console.ReadLine();
if (con.ToUpper() != "Y")
{
stop = 1;
}
}
else if (!IsNumeric(userNumbers))
{
Console.WriteLine("You entered non-numeric value(s)");
Console.WriteLine("Try Again Y or N");
con = Console.ReadLine();
if (con.ToUpper() != "Y")
{
stop = 1;
}
}
else if (IsInRange(userNumbers) < 6)
{
Console.WriteLine("You entered out of range value(s)");
Console.WriteLine("Try Again Y or N");
con = Console.ReadLine();
if (con.ToUpper() != "Y")
{
stop = 1;
}
}
else
{
var lowerBound = 1;
var upperBound = 100;
var random = new Random();
int[] randomNum = new int[6];
int count = 0;
foreach(string str in userNumbers){
var rNum = random.Next(lowerBound, upperBound);
randomNum[count] = rNum;
count ;
}
string[] ourPicks = Array.ConvertAll(randomNum, s => s.ToString()).ToArray();
Array.Sort(userNumbers);
Array.Sort(ourPicks);
//string[] ourpicks = { "1", "2" };//for testing
Console.WriteLine("Your Numbers: {0}", string.Join(", ", userNumbers));
Console.WriteLine("Our Numbers: {0}", string.Join(", ", ourPicks));
string[] result = userNumbers.Intersect(ourPicks).ToArray();
if(result.Count() > 0)
{
Console.WriteLine("Matchs: {0}", string.Join(", ", result));
}
else
{
Console.WriteLine("Match's = 0");
}
stop = 1;
}
}
Console.ReadLine();
}
public static bool IsNumeric(string[] num)
{
foreach (string str in num)
{
bool check = int.TryParse(str, out int test);
if (!check)
{
return false;
}
}
return true;
}
public static int IsInRange(string[] num)
{
int count = 0;
foreach (string str in num)
{
int.TryParse(str, out int test);
if (test > 0 & test <= 100)
{
count ;
}
}
return count;
}
uj5u.com熱心網友回復:
在閱讀了一些答案后,我有了一些想法。現在正在作業。謝謝你的幫助。
Console.WriteLine("Function get numbers...");
int[] values2 = new int[10];
static int[] numbers(int[] values){
for(int ind = 0; ind < values.Length; ind ){
Console.WriteLine("Type a number: ");
values[ind]= int.Parse(Console.ReadLine());
}
return values;
}
values2 = numbers(new int[10]);
Console.WriteLine("Array Length: " values2.Length);
for(int i = 0; i < values2.Length; i ){
Console.WriteLine(values2[i]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523696.html
標籤:C#。网功能返回值
上一篇:洗掉函式定義中的重復代碼
