我有一个接受输入的程序:读取的第一行是将给出的坐标数,其余行是坐标本身。它读取所有坐标并找到任意两点之间的最短距离(两个最近坐标之间的距离),然后显示距离和找到答案所花费的时间。
我的问题是,当我运行程序时,我必须按 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(又称使用方法)?
答案 0 :(得分:0)
有很多方法,但在输入列表中添加额外的回车功能就可以了。
更好的解决方案是:
Console.In