在C#中使用ReadLine方法

时间:2015-01-26 03:58:01

标签: c# algorithm stopwatch

我有一个接受输入的程序:读取的第一行是将给出的坐标数,其余行是坐标本身。它读取所有坐标并找到任意两点之间的最短距离(两个最近坐标之间的距离),然后显示距离和找到答案所花费的时间。

我的问题是,当我运行程序时,我必须按 Enter 键才能计算“找到答案的时间”。我必须使用1000个整数的输入数据,所以我必须数字粘贴到控制台中 - 然后立即按Enter键以便不会经过太多时间。

我的问题是:使用ReadLine方法的最简单方法是什么,以便程序的Stopwatch对象不必等待 Enter 键被按下。我无法解决这个问题。

这是我的计划:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Numerics;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double smallestDistance = 0.0;
            int numberOfPoints = 0;
            String userInput = "";
            String coordinate = "";
            int coordinatesEntered = 0;

            //Grab the number of points that will be used.
            userInput = Console.ReadLine();

            //Try and convert and store the input to an integer.
            numberOfPoints = Convert.ToInt32(userInput);

            int[] xcoords = new int[numberOfPoints];
            int[] ycoords = new int[numberOfPoints];

            //Create a new stopwatch in order to time program.
            Stopwatch sw = Stopwatch.StartNew();

            //Get all the points.
            while(coordinatesEntered < numberOfPoints)
            {   
                coordinate = Console.ReadLine();
                string[] numbers = coordinate.Split(' ');

                xcoords[coordinatesEntered] = Convert.ToInt32(numbers[0]);
                ycoords[coordinatesEntered] = Convert.ToInt32(numbers[1]);

                coordinatesEntered++;
            }//end while

            smallestDistance = getShortestDistance(xcoords, ycoords, numberOfPoints);
            sw.Stop ( );
            Console.Write ("\n");
            Console.WriteLine(string.Format("{0:N6}", Math.Sqrt(smallestDistance)));
            Console.WriteLine ("Time used: {0} secs", sw.Elapsed.TotalMilliseconds / 1000);
            Console.ReadKey ( );
        }

        public static double getShortestDistance(int[] x, int[] y, int numOfCoords)
        {
            int i;
            int j;

            double shortestDistance = 0;

            for (i = 0; i<numOfCoords-1 ; i++)
            {
                for (j= i+1 ; j<numOfCoords ; j++)
                {
                    double xresultsqrd = Math.Pow((x[j] - x[i]), 2.0);
                    double yresultsqrd = Math.Pow((y[j] - y[i]), 2.0);

                    double finalResult = xresultsqrd + yresultsqrd;

                    if(i == 0)
                    {
                        shortestDistance = finalResult;
                    }else if(finalResult < shortestDistance){
                        shortestDistance = finalResult;
                    }//end elseif
                }//end inner-for
            }//end outer-for

            return shortestDistance;
        }//end getShortestDistance;

    }//end class Program
}//end namespace ConsoleApplication2

这是输入所需的txt文件: http://hastebin.com/zulowuvuyu.lisp

我认为问题是ReadLine方法正在等待按 Enter ,但由于我粘贴没有输入密钥。如何让ReadLine停止寻找按下Enter(又称使用方法)?

1 个答案:

答案 0 :(得分:0)

有很多方法,但在输入列表中添加额外的回车功能就可以了。

更好的解决方案是:

  • 从其他来源(如文件)
  • 读取
  • 使用Console.In
  • 将输入作为流阅读