2015-12-12 2 views
0
static int min(int[] arr, int a) 
    { 
     int min = arr[0]; 
     for (int i = 1; i < a; i++) 
      if (arr[i] < min) 
       min = arr[i]; 
     return min; 
    } 

    static void Main(string[] args) 
    { 
     int[] arr = new int[10]; 
     int i; 
     Console.WriteLine("Vnesi števila: "); 
     for (i = 0; i < 10; i++) 
     { 
      int stevilo = int.Parse(Console.ReadLine()); 
      if (stevilo == 0) 
       break; 
      arr[i] = stevilo; 
     } 

     if (i < 2) 
     { 
      Console.WriteLine("Napaka - premalo števil!"); 
      Console.ReadKey(); 
      return; 
     } 

     int min1 = min(arr, i); 

     int? min2 = null; 
     for (int j = 0; j < i; j++) 
     { 
      int stevilo = arr[j]; 
      if(stevilo != min1 && (min2 == null || stevilo < min2)) 
       min2 = stevilo; 
     } 

     if(min2 == null) 
      Console.WriteLine("Napaka - vsa števila enaka!"); 
     else 
      Console.WriteLine("Drugo najmanjše: " + min2.ToString()); 

     Console.ReadKey(); 
    } 
} 

Так что этот код читается от 2 до 10 цифр и записывает второй наименьший из одного из них. Вы можете отменить ввод чисел с помощью клавиши 0. В случае, когда второе наименьшее число не может быть выписано (все введенные, например, 5 5 5 5), то число не выписывается).Что использовать вместо нуля

НО Я узнал, что мы не можем использовать нулевые значения, поэтому что я могу заменить? Благодаря!

+2

Почему вы не можете использовать 'null'? Что мешает этому? – David

+0

Школа не позволяет это –

+0

Что вы хотите достичь с помощью null? – Filip

ответ

0

Инициализировать min2 переменный в 0, то проверить его, когда вам нужно искать значение мин и не использовать обнуляемый целое

int min2 = 0; 
    for (int j = 0; j < i; j++) 
    { 
     int stevilo = arr[j]; 
     if(stevilo != 0 && stevilo != min1 && stevilo < min2)) 
      min2 = stevilo; 
    } 

    if(min2 == 0) 
     Console.WriteLine("Napaka - vsa števila enaka!"); 
    else 
     Console.WriteLine("Drugo najmanjše: " + min2.ToString()); 

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

int stevilo; 
string userInput = Console.ReadLine(); 
if(!Int32.TryParse(userInput, out stevilo) || stevilo == 0) 
    break; 
arr[i] = stevilo; 

использование Int32.TryParse избегает исключение, если ваш пользователь что-то, что не могут быть преобразованы в целое число

+0

не может использовать ни одно из них –

+0

Могу я просто использовать «0»? –

+0

Да, элементы массив автоматически инициализируется нулем, поэтому он также может использоваться в качестве указателя, когда вам нужно остановиться, обновить – Steve

0

Ну, странно сдерживают т, но как только вы его, а затем просто использовать bool флаг или тот факт, что min2 должен отличаться от min1 как этот

// ... 

int min1 = min(arr, i); 

int min2 = min1; 
for (int j = 0; j < i; j++) 
{ 
    int stevilo = arr[j]; 
    if(stevilo != min1 && (min2 == min1 || stevilo < min2)) 
     min2 = stevilo; 
} 

if(min2 != min1) 
    Console.WriteLine("Napaka - vsa števila enaka!"); 
else 
    Console.WriteLine("Drugo najmanjše: " + min2.ToString()); 
Смежные вопросы