Очень простая программа для численного сравнения - PullRequest
0 голосов
/ 20 октября 2010

Почему-то я не могу понять логику программы, которая:

  1. Снимает в списке чисел
  2. Пройдет через них (через a для каждого цикла), чтобы найти наименьшее число
  3. отображает наименьшее число через Writeline

Если наименьшее количество должно быть инициализировано 0, то не будет ли наименьшее число ВСЕГДА 0? (Я предоставил основной текстовый файл, содержащий список различных целых чисел, вот что такое TwoNumbers.txt)


string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );

 int leastNumber = 999;
 int previousNumber = 0;

 foreach (string line in lines)
 {
   int currentNumber = int.Parse ( line );
   currentNumber = leastNumber;
   if (currentNumber < previousNumber)
   {
     leastNumber = currentNumber;
   }
 }

 Console.WriteLine ("The least number is: " + leastNumber);
 Console.ReadLine ();

Ответы [ 6 ]

2 голосов
/ 20 октября 2010

В вашей программе вы переопределяете текущее число:

int currentNumber = int.Parse ( line );
currentNumber = leastNumber;

Вторая строка приведет к тому, что текущее число будет 999 в первой итерации, после чего наименьшее количество будет установлено в 0после вашей проверки.

После этой точки currentNumber всегда будет установлен на 0 и останется таким.

Вам на самом деле не нужен предыдущий номер вообще.Просто сделай:

string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );

int leastNumber = int.MaxValue;

foreach (string line in lines)
 {
   int currentNumber = int.Parse ( line );
   if (currentNumber < leastNumber)
   {
     leastNumber = currentNumber;
   }
 }

 Console.WriteLine ("The least number is: " + leastNumber);
 Console.ReadLine ();
2 голосов
/ 20 октября 2010

Попробуйте это:

string[] lines = File.ReadAllLines("TwoNumbers.txt");

int leastNumber = int.MaxValue;

foreach (string line in lines)
{
    int currentNumber = int.Parse(line);

    if (currentNumber < leastNumber)
    {
        leastNumber = currentNumber;
    }
}

Console.WriteLine("The least number is: " + leastNumber);
Console.ReadLine();
0 голосов
/ 20 октября 2010

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

int[] listOfPositiveInts = new int[]{2,3,4,5,1,67};
var minInt = listOfPositiveInts.Min();
Console.WriteLine(minInt);

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

Если вы хотите понять алгоритм, вам следует подумать в псевдокоде

create variable to track current lowest number 
initialize tracking Variable to the first number in my array
loop through the array of numbers to inspect
if the number I'm inspecting is lower than my current lowest number
    replace my current lowest number with the number I'm inspecting
end loop
Display lowest value found

Что выглядит так при использовании цикла foreach

// test data
int[] arrayOfNumbers= new int[]{2,3,4,5,1,67};

// search algorithm
int lowestValueFound = arrayOfNumbers[0];
foreach(int i in arrayOfNumbers)
{
     if (i < lowestValueFound)
         lowestValueFound = i;
}
Console.WriteLine("Lowest value found is {0}", lowestValueFound);

Преобразование строкитам может быть только шум, если вы пытаетесь понять алгоритм.Если вы просто пытаетесь это сделать, попробуйте использовать массив целых и вместо этого использовать LINQ.

0 голосов
/ 20 октября 2010

Ба. Я вижу, что я сделал.

string[] lines = File.ReadAllLines ( "TwoNumbers.txt" );

        int leastNumber = 0;
        int previousNumber = 0;

        foreach (string line in lines)
            {
            int currentNumber = int.Parse ( line );
            **currentNumber = leastNumber;**

            if (leastNumber == 0 || currentNumber < leastNumber)
                {
                leastNumber = currentNumber;
                }
            previousNumber = currentNumber;
            }
        Console.WriteLine ("The least number is: " + leastNumber);
        Console.ReadLine ();

Нет необходимости в назначении currentNumber = leastNumber;

0 голосов
/ 20 октября 2010

Существуют ОТРИЦАТЕЛЬНЫЕ целые числа, которые меньше 0. Что-нибудь мешает отрицательным целым в вашем текстовом файле?

0 голосов
/ 20 октября 2010

Ваша проблема в сравнении.

Вы сравниваете currentNumber < previousNumber, но previousNumber всегда равно 0, потому что вы ничего ему не присвоили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...