2015-11-28 6 views
-1

Я новичок в C#. Как добавить аддитивный шум в последовательность чисел? Например, я хочу добавить шум (3,2,1) в этой последовательности:Как добавить аддитивный шум в последовательность чисел, C#?

1: 1
2: 1
3: 1
4: 1
5: 2
6 : 1
6: 2
6:60
7: 1
8: 1
9: 2
10: 1

Ожидаемый результат: случайный шум будет добавлен.

1: 1
2: 1
3: 1
4: 1 **, 3 **
5: 2
6: 1
6: 2
6: 60 ** , 2 **
7: 1
8: 1
9: 2 **, 1 **
10: 1

+0

Что вы пробовали, прежде чем задать вопрос? Можете ли вы поделиться некоторым кодом, который вы написали? – MarcinJuraszek

+0

Перед этим я просто тестирую с помощью простого кодирования случайных чисел, которые делают строку случайного числа. Я уже нашел решение. Я расскажу об этом ниже. Спасибо.^_^ – Ruby

ответ

0

Ниже приведен один из способов выполнения задачи, используя общий список. Типичные типы списков концептуально похожи на массивы, но обернуты дополнительными функциями, что облегчает жизнь.

В противном случае вы можете использовать простой массив для получения тех же результатов.

 //using System.Collections.Generic; 
     //using System.Linq; 
     Console.Clear(); 
     List<String> Clean = new List<string>() { "1:1", "2:1", "3:1", "4:1", "5:2", "6:1", "6:2", "6:60", "7:1", "8:1", "9:2", "10:10" }; 
     for (int i = 0; i < 3; i++) 
     { 
      Random rnd = new Random(DateTime.Now.Millisecond); 
      int index = rnd.Next(0, Clean.Count); 
      if (Clean[index].Contains("*")) 
      {//Already has noise. 
       i--; 
      } 
      else 
      {//Make some noise. 
       Clean[index] = Clean[index] + "**" + i.ToString() + "* *"; 
      } 
     } 
     Clean.ForEach(var => Console.WriteLine(var)); 
     Console.WriteLine(); 
     Console.ReadLine(); 
+0

Это отличная кодировка. Я уже понял поток случайного числа. Я изменил ваше кодирование, так что это пакет с ожидаемым результатом, который я хочу. Я расскажу об этом ниже. Спасибо за ваш пример и объяснение. Это действительно помогает. – Ruby

+0

Вам не следует создавать новый экземпляр «Случайный» в цикле. Он вернет тот же номер из-за ограниченной точности DateTime.Now.Millisecond. Создайте его перед входом в цикл и используйте его внутри. – MarcinJuraszek

0
 using (OpenFileDialog ofd = new OpenFileDialog()) 
     { 
      if (ofd.ShowDialog() != DialogResult.OK) 
       return; 

      string fn = ofd.FileName; 


      string[] lines = File.ReadAllLines(fn); 

      txtData.Text = ""; 

      List<string> Clean = new List<string>(lines); 
      for (int i = 0; i < 3; i++) 
      { 
       Random rnd = new Random(DateTime.Now.Millisecond); 
       int index = rnd.Next(0, Clean.Count); 
       if (Clean[index].Contains(",")) 
       {//Already has noise. 
        i--; 
       } 
       else 
       {//Make some noise. 
        Clean[index] = Clean[index] + "," + i.ToString(); 
       } 
      } 
      //Clean.ForEach(var => Console.WriteLine(var)); 
      // Console.WriteLine(); 
      // Console.ReadLine(); 
      for (int i = 0; i < Clean.Count; i++) 
      { 
       txtData.Text += Clean[i] + Environment.NewLine; 
      } 
     } 
+0

Тот же комментарий: вам не следует создавать новый экземпляр Random в цикле. Он вернет тот же номер из-за ограниченной точности DateTime.Now.Millisecond. Создайте его перед входом в цикл и используйте его внутри. – MarcinJuraszek

+0

Я использую файл просмотра, а не его перечисление вручную. Спасибо Павлу за его пример. Я просто изменил пример, предоставленный на основе моего ожидания. Спасибо всем. – Ruby

+0

Я пробовал, как вы и предполагали. Я поставил случайный внешний цикл и поместил ряд случайных чисел внутри цикла. Это работает хорошо. Но я замечаю, что случайное число добавляет много чисел в одну и ту же последовательность. Я пытаюсь выяснить, как избежать его добавления в той же строке. Спасибо Марчину.^_ ^ – Ruby

 Смежные вопросы

  • Нет связанных вопросов^_^