2016-06-05 3 views
-2

Недавно меня попросили сделать Array Sorter, но для этого уже есть встроенная функция, но мне она не нужна, я хотел бы знать, почему следующий скрипт не будет продолжаться всякий раз, когда он передает этот комментарий линия??Почему мои петли не будут выполняться?

int n; 
    int t = 0; 
    Console.Write("How many elements do you want to add? "); 
    int length = Convert.ToInt32(Console.ReadLine()); 
    int[] List = new int[length]; 
    while (t < length) 
    { 
     Console.Write("Enter {0} element value: ", t); 
     n = Convert.ToInt32(Console.ReadLine()); 
     List[t] = n; 
     ++t; 
    } 

    /////V The Below code is skipped for some reason V\\\\\ 

    int temp; 
    int min = List[1]; 
    int min_i = 1; 
    if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
    else 
    { 
     for (int y = 1; y > length;) 
     { 
      for (int x = min_i - 1; x < 0; x--) 
      { 
       if (List[min_i] < List[x]) 
       { 
        temp = min; 
        List[min_i] = List[x]; 
        List[x] = temp; 
       } 
       else break; 
      } 
      y++; 
      min = List[y]; 
      min_i = y; 
     } 

    } 
    for(int z = 0; z > length; z++) 
    { 
     Console.Write(List[z] + " "); 
    }    
+0

'>' вместо '<' в последнем цикле 'for', между прочим. – Rotem

+0

Если код ниже комментария пропущен, вы, вероятно, получаете исключение в коде выше комментариев. Вы вводите все целые числа в качестве входов? – jdweng

+0

да вот что я делаю ввод: http://prntscr.com/bcmpzd –

ответ

0

Условие, заданное для for петли всегда ложным.

for (int x = min_i - 1; x < 0; x--) // x is zero and condition is false. 

Я думаю, вы должны изменить выше линии

for (int x = min_i - 1; x > 0; x--) 

Аналогичный случай с петлей верхнего уровня, а также, возможно, потребуется искать y<length

+0

Это не сработало, всякий раз, когда я меняю его на y

+0

Вы модифицировали оба цикла, как указано в ответе? –

+0

да изменено оба, иногда сбои иногда пропускаются. –

1

Игнорирование остальное (и добавив к тому, что другие прокомментировали) - этот цикл всегда будет ложным:

for (int y = 1; y > length;) // y = 1; length >= 2 
+0

почему ложь? это уже оператор if выше этого цикла, который проверяет, если длина> 2 –

+0

@GhadeerAlali, потому что y всегда <длина ... –

0

Увеличение значения y будет меньше некоторого значения верхнего диапазона.

for (int y = 1; y < length; y++) 

Уменьшить значение x, которое будет больше некоторого значения нижнего диапазона.

for (int x = min_i - 1; x > -some value ; x--) 

Увеличение значения z должно быть меньше значения верхнего диапазона.

for(int z = 0; z < length; z++) 

В ответ на ваши замечания, попробовать что-то вроде этого:

int n; 
int t = 0; 
Console.Write("How many elements do you want to add? "); 
int length = Convert.ToInt32(Console.ReadLine()); 
int[] List = new int[length]; 
while (t < length) 
{ 
    Console.Write("Enter {0} element value: ", t); 
    n = Convert.ToInt32(Console.ReadLine()); 
    List[t] = n; 
    ++t; 
} 

/////V The Below code is skipped for some reason V\\\\\ 

int temp; 
int min = List[1]; 
int min_i = 1; 
if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
else 
{ 
    for (int y = length - 1; y > 0; y--) 
    { 
     for (int x = 0; x < y; x++) 
     { 
      if (List[x] > List[x + 1]) 
      { 
       temp = List[x]; 
       min = List[x + 1] 
       List[x] = min; 
       List[x + 1] = temp; 
      } 
     } 
    } 
} 
+0

Значение 1-го значения уже увеличено внутри цикла, вы можете найти его после этого вложенного цикла, 2nd & Третий не работал. –

+0

@GhadeerAlali нет необходимости увеличивать значение y в цикле, это целая точка цикла for. Что касается двух других, я не удивлен, что они не работают, так как есть проблемы с вашим кодом, которые выходят за рамки того, как вы отформатировали свои циклы, как диапазоны, я не знаю, какой диапазон вам нужен, но я знаю, что если вы увеличиваете или уменьшаете размер, вам нужно отформатировать петли таким образом, как я предложил. Теперь вам нужно узнать, какие значения верхнего и нижнего диапазона используются для вторых двух циклов. –

+0

Я хочу, чтобы код был таким: он начинается со второго элемента в массиве и обратный проверяет, превышает ли элемент до него больше, чем они заменяются, и так далее ... пока он не достигнет элемента, который ниже, чем элемент двигаются назад с ним. Затем он переходит на третий элемент цикла & и выполняет те же действия, что и предыдущие, и так далее до последнего элемента массива. –

0
int n; 
     int t = 0; 
     Console.Write("How many elements do you want to add? "); 
     int length = Convert.ToInt32(Console.ReadLine()); 
     int[] List = new int[length]; 
     while (t < length) 
     { 
      Console.Write("Enter {0} element value: ", t); 
      n = Convert.ToInt32(Console.ReadLine()); 
      List[t] = n; 
      ++t; 
     } 

     /////V The Below code is skipped for some reason V\\\\\ 

     int temp; 
     int min = List[1]; 
     int min_i = 1; 
     if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
     else 
     { 
      for (int y = 1; y <= length - 1; y++) //see #1 and #2 
      { 
       for (int x = min_i - 1; x >= 0; x--) //for loop was backwards see #2 
       { 
        if (List[min_i] < List[x]) 
        { 
         temp = min; 
         List[min_i] = List[x]; 
         List[x] = temp; 
        } 
        else break; 
       } 
       //remove y++; and added to for loop 
       min = List[y]; 
       min_i = y - 1; 
      } 

     } 
     for (int z = 0; z <= length - 1; z++) //see #1 and #2 
     { 
      Console.Write(List[z] + " "); 
     } 
     Console.Read(); //added to prevent the program from closing until you press enter or manually close it 

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

1) поэтому массивы начинаются с 0 вместо 1. Ваша длина не соответствует. Код был сломан из-за длины 4, но массив только 3 ([0], [1], [2], [3]), поэтому, добавив «length-1», вы не меняете длину, но вы все равно можете ссылаться на нее на тот же номер, что и массив, и он не выходит за пределы массива.

2) У вас было почти все ваши заявления в обратном порядке. Позвольте мне посмотреть, могу ли я помочь вам запомнить это немного лучше.

для (интермедиат а = 0;

эта часть просто инициализирует значение

< = 10;.

думать об этом как некоторое время заявления Хотя (а < = 10) { Продолжайте работает для цикла}

A ++)

и конечно приращение.

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

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