2014-05-04 28 views
1

我是C#的初學者。我的任務是用隨機生成的數字填充數組,並檢查是否有類似的數字,並用新的隨機數來更改它們。 但是這個新生成的隨機數應該根據現有的數組進行檢查。 我需要幫助完成最後一項任務。查看c中數組中的相似數字#

這裏是我的代碼:提前

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Random r = new Random(); 
      int[] x = new int[20]; 
       for (int i=0; i < 20; i++) 
      { 
       x[i] = r.Next(100); 
       Console.Write(x[i]+" "); //printing original array 
      } 
       Console.WriteLine(); 

       Console.WriteLine("New array is : "); 
       for (int k = 0; k < 20;k++) 
       { 
        for (int n = k + 1; n < 20;n++) 
        { 
         if (x[n]==x[k])   //checking if there duplicated ones 
         { 
          Console.Write("New number is: "); 
          x[k]= r.Next(100);       
         } 
        } 
         Console.WriteLine(x[k]); 

       } 
        Console.ReadKey(); 


     } 
    } 
} 

感謝

+0

陣列有一個蘊含方法 - 你可以看看成 –

回答

2

沒有必要爲那些那種長計算,你可以簡單地做一個do while循環在開始創建隨機數,直到有數組不包含數字,如創建的,是這樣的:

Random r = new Random(); 
int[] x = new int[20]; 
for (int i = 0; i < x.Length; i++) 
{ 
    do 
    { 
     x[i] = r.Next(100); 

    } while (x.Contains(x[i])); // loops until the array does not contain an number like the one that was just created 

    Console.Write(x[i] + " "); 
} 

或者,如果你想繼續做你的方式,插件tead的嵌套for循環,你可以做一個循環只有一個條件與array.Contains(element)方法。如果存在與括號中給出的元素相同的元素,則此方法返回true;如果沒有,則返回false。

+0

使用的語言,如C#,它是更好地使用已經提供的方法。 –

+0

我在做什麼? – Lynx

+0

是的,我實際上同意你的意見。已經upvoted。 –

1

@Lynx答案完美的作品,但我想給它犯規使用LINQ的選擇:x.Contains(...)

static void Main(string[] args) 
    { 
     Random r = new Random(); 
     int[] x = new int[20]; 
     for (int i = 0; i < 20; i++) 
     { 
      x[i] = r.Next(100); 
      Console.Write(x[i] + " "); 
     } 

     Console.WriteLine("New array is : "); 
     for (int k = 0; k < 20; k++) 
     { 
      for (int n = k + 1; n < 20; n++) 
      { 
       if (x[n] == x[k]) 
       { 
        int newNumber; 

        //Keeps generating a number which doesnt exists 
        //in the array already 
        do 
        { 
         newNumber = r.Next(); 
        } while (contains(x, newNumber)); 
        //Done generating a new number. 



        Console.Write("New number is: "); 
        x[k] = newNumber; 
       } 
      } 
      Console.WriteLine(x[k]); 
     } 
    } 

    /// <summary> 
    /// Returns true if the given array contains the given number 
    /// </summary> 
    /// <param name="array">The array to check</param> 
    /// <param name="number">The number to check</param> 
    /// <returns>bool True if number exists in array</returns> 
    static bool contains(int[] array, int number) 
    { 
     for (int i = 0; i < array.Length; i++) 
     { 
      if (array[i] == number) 
      { 
       return true; //Returns true if number already exists 
      } 
     } 
     return false; 
    }