2013-04-25 8 views
-1

Я совершенно не знаком с C#. Я пытаюсь пройти через короткий массив, где строковые элементы в массиве помещаются в конец поиска по сайту. Код:C# Loop Through Array

int n = 1; 
string[] s = {"firstitem","seconditem","thirditem"} 
int x = s.Max(); // note, from my research this should return the maximum value in the array, but this is the first error 
x = x + 1 

while (n < x) 
{ 

     System.Diagnostics.Process.Start("www.website.com/" + b[0]); 

     b[]++; // this also generates an error "identifier expected" 

} 

Мое кодирование, логика или оба являются неправильными. На основании того, что я прочитал, я должен иметь возможность получить максимальное значение в массиве (как int), а затем добавить к значению массивов, в то время как цикл WHILE добавляет каждое значение в массив в конце веб-сайта (и затем останавливается). Обратите внимание, что на первой ошибки, я попытался кодирования его по-разному, как показано ниже:

int x = Convert.ToInt32(s.Max); 

Тем не менее, он генерирует сообщение об ошибке перегрузки. Если я правильно читаю, MAX должен найти максимальное значение в последовательности.

+2

Ваш цикл никогда не выйти! 'while (n <= x)' всегда будет true, так как вы не изменяете 'x' или' n' в теле. Таким образом, он зациклится навсегда. –

+0

Какие ошибки вы получаете точно? –

+3

Извините, но почти все в вашем коде неверно. Пожалуйста, прочитайте [Массивы (Руководство по программированию на C#)] (http://msdn.microsoft.com/en-us/library/vstudio/9b9dty7d.aspx) –

ответ

6
foreach(var str in s) 
{ 
    System.Diagnostics.Process.Start("www.website.com/" + str); 
} 
+0

Здесь вы должны просто использовать регулярный, а не foreach. – Yatrix

+2

Зачем мне это делать? –

+0

Производительность. В цикле foreach вы создаете копию строки, когда это необязательно. Просто хватайте его своим индексом. Зачем создавать копию строки только для добавления ее в другую строку? – Yatrix

3

У вас есть коллекция строк. Самая большая строка - это строка, а не int. Поскольку s.Max() является строкой, и вы освещаете ее переменной типа int: int x = s.Max();, компилятор (правильно) сообщает вам, что типы не совпадают. Вам нужно преобразовать эту строку в int. Поскольку, глядя на ваши данные, они не являются целыми числами, и я не вижу разумного способа преобразования этих строк в целые числа, я не вижу разумного решения. Какое целое должно быть «firstitem»?

Если вы просто хотите, чтобы выполнить некоторый код для каждого элемента массива, а затем использовать один из этих шаблонов:

foreach(string item in s) 
{ 
    System.Diagnostics.Process.Start("www.website.com/" + item); 
} 

или

for(int i = 0; i < s.Length; i++) 
{ 
    System.Diagnostics.Process.Start("www.website.com/" + s[i]); 
} 
1
  1. Вы пропустили несколько пола -colons
  2. x должен быть предположительно Length из массива, а не наибольшее значение в нем
  3. Вы должны увеличивать x внутри вашего цикла - в конце его, а не за его пределами
  4. Вы должны быть фактически приращением n, не x
  5. n должно быть, начиная с 0, а не на 1
  6. Внутри цикла вы используете b[0] где вы, вероятно, хотите использовать b[n]
  7. Я не C++ гуру, но я понятия не имею, что b[]++ может означать
  8. Как и другие ответы уже упоминалось, вы не можете использовать for или foreach вместо while.
  9. Приложите усилия, чтобы пройти некоторые вводные учебники. Метод пробы и ошибки могут быть полезным инструментом, но нет никакой необходимости, чтобы возвратиться на том, что при изучении самых основ
0

из образца

var processList = (new string[]{"firstitem","seconditem","thirditem"}) 
       .Select(s => Process.Start("www.website.com/" + s)) 
       .ToList(); 

и здесь тестовая версия, которая выводит на консоль

(new string[] { "firstitem", "seconditem", "thirditem" }) 
      .Select(s => { Console.WriteLine(@"www.website.com/" + s); return s; }) 
      .ToList(); 

примечание: для выбора требуется тип возврата и.ToList() обеспечивает оценку.

+0

Вопрос3CPO, казалось, был новичком в моих глазах. –

+0

Linq и Lamdas - вот некоторые из особенностей C#. У меня были хорошие результаты, которые показывали начинающим программистам. – CCondron

1

Ниже изображение, чтобы указать, что являются ошибки кода:

Answer with picture

После коррекции, было бы:

int n=1; 
string[] s= { "firstitem", "seconditem", "thirditem" }; 
int x=s.Length; 

while(n<x) { 
    System.Diagnostics.Process.Start("www.website.com/"+s[n]); 
    n++; // or ++n 
} 

И мы можем сделать его более семантический :

var items=new[] { "firstitem", "seconditem", "thirditem" }; 

for(int index=1, count=items.Length; index<count; ++index) 
    Process.Start("www.website.com/"+items[index]); 

Если начальный заказ не имеет значения , И мы можем использовать foreach вместо этого, и мы можем использовать Linq, чтобы сделать код еще проще:

var list=(new[] { "firstitem", "seconditem", "thirditem" }).ToList(); 
list.ForEach(item => Process.Start("www.website.com/"+item)); 

и мы можем довольно часто пишут в другой форме:

foreach(var item in new[] { "firstitem", "seconditem", "thirditem" }) 
    Process.Start("www.website.com/"+item);