2009-04-07 4 views
0

У меня есть код здесь, и я бы хотел, чтобы он отобразил первые 10, и если я нажму на него, он снова отобразит вторую партию. Я попробовал это первым с моим первым кодом для кода, и теперь он работает с массивами, кажется, он его не принялМодуль (%) in for-loop

Тот, который я прокомментировал, не работает? это неправильно? Благодаря

long [] potenzen = new long[32]; 
potenzen[0] = 1; 

for (int i = 1; i < potenzen.Length; ++i) 
{ 
    potenzen[i] = potenzen[i-1] * 2; 
    //if (potenzen % 10 == 0) 
    // Console.ReadLine(); 
} 

foreach (long elem in potenzen) 
{ 
    Console.WriteLine(" " + elem); 
} 

ответ

4
long [] potenzen = new long[32]; 
potenzen[0] = 1; 
for (int i = 1; i < potenzen.Length; ++i) 
{ 
    potenzen[i]=potenzen[i-1]*2; 
    Console.WriteLine(potenzen[i-1]); 
    if (i % 10 == 0) 
    Console.ReadLine(); 
} 

более соответствует тому, что вы хотите. Улучшение будет заключаться в том, чтобы отделить логику обработки данных от логики отображения данных.

long [] potenzen = new long[32]; 
potenzen[0] = 1; 
for (int i = 1; i < potenzen.Length; ++i) 
    potenzen[i]=potenzen[i-1]*2; 

for (int i = 0; i < potenzen.Length; ++i) 
{ 
    Console.WriteLine(potenzen[i]); 
    if (i % 10 == 0) 
    Console.ReadLine(); 
} 

Конечно, вы могли бы сделать это без массива

long potenzen = 1; 
for (int i = 1; i < 32; ++i) 
{ 
    Console.WriteLine(potenzen); 
    potenzen = potenzen * 2; 
    if (i % 10 == 0) 
    Console.ReadLine(); 
} 
3

Применяя оператор модуля в массив долгот сомнительна.

+0

спасибо, что вводите. поэтому оператор модуля не работает на массив длин? – tintincutes

+0

Массив - это объект. Оператор модуля работает только с числовыми примитивными типами. http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx – Will

4

Понадобится:

if (i % 10 == 0) 

и нет:

if (potenzen % 10 == 0) 
2

potenzen является массивом, так что вы, возможно, попробовать

if (i % 10 == 0) 

или, может быть

if (potenzen[i] % 10 == 0) 
1

Вы принимаете в мод массив 10 - в лучшем случае, в небезопасном языке, вы бы делать операцию по модулю на адрес памяти.

Это должно работать нормально, если вы просто изменить линию:

// if you don't want to pause the first time you run it, replace with: 
// if (i > 0 && i % 10 == 0) { 
if (i % 10 == 0) { 
    Console.ReadLine(); 
} 
1

Попробуйте изменить его на:

long [] potenzen = new long[32]; 
potenzen[0] = 1; 
Console.WriteLine(potenzen[0]); 
for (int i = 1; i < potenzen.Length; ++i) 
{ 
    potenzen[i]=potenzen[i-1]*2; 
    Console.WriteLine(potenzen[i]); 
    if (i % 10 == 0) 
    { 
     var s = Console.ReadLine(); 
     // break if s == some escape condition??? 
    } 
} 

Прямо сейчас, вы никогда не печатать, если вы полностью не закончите ваш первый для цикла. Я предполагаю, что вы не разрешаете заполнять 32 элемента, поэтому вы никогда не увидите своих результатов.

Это будет печатать их по мере их поступления.

+0

Я вижу мои результаты. правильно, я не разрешаю 32 элементам заполнить. Я хотел бы видеть первые элементы партии (10), и если я снова войду, я увижу следующую партию из 10 элементов. Извините, я не понимаю последнее предложение вашего вопроса? что вы имеете в виду, --- – tintincutes

+0

То, как у вас было это, оно никогда не отображалось, пока ПОСЛЕ того, как вы сказали, чтобы он выполнял всю вашу обработку. То, как я переписал его, будет делать 10 и отображать их, а затем запрашивать (затем делать следующие 10 + отображать их). –

+0

привет спасибо Рид, я понял! Спасибо за четкое объяснение :-) – tintincutes