在 java 中获取输入的快速方法是什么?
what are the fast ways to take input in java?
在 Java 中,我使用标准 Scanner
和 BufferedReader
类 进行输入,例如:
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
或
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a=Integer.parseInt(br.readLine());
但是接受这样的输入需要很多 运行 时间。我想知道更快的输入方式。提前致谢
编辑:我见过像 uwi 这样的顶级 java 编码员,他们以非常不同的方式接受输入。他们有点创建自己的 reader class。我不明白他们的程序如何在运行时变快。
来自 dejavu 的引述:
“BufferedReader 比 Scanner 快很多,因为它缓冲了字符,所以您不必每次都访问该文件,您想要从中读取一个字符。
扫描仪有特殊用途,例如直接读取原始数据类型,也可用于正则表达式。
我同时使用了 Scanner 和 BufferedReader,BufferedReader 提供了显着的快速性能。你也可以自己测试一下。"
来自:which to choose buffered reader or scanner from performance point of view
在下面的文章中,作者讨论了在控制台中读取用户输入的三种不同方式。每种方式都相当容易使用,也有自己的优点和缺点。
讨论了以下机制并提供了示例。
还有一个优缺点部分。
Link:
http://www.codejava.net/java-se/file-io/3-ways-for-reading-input-from-the-user-in-the-console
Link:
Most Efficient Way of Taking User Input in Java
选项:
扫描器Class->
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter a number: ");
int n = reader.nextInt();
DataInputStream->
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
BufferedReader ->
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
String name = reader.readLine();
System.out.println("Your name is: " + name);
控制台->
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());
如果您想要一种快速方式通过标准输入进行输入(并且,如果我理解正确的话,您想要一种快速方式来重复向您的程序提供输入),您最好赌注是通过管道或重定向罐头响应,例如
$ java MyReadingClass < mycannedinput.txt
因此您可以构建您的 class 以通过标准输入进行交互式输入,然后使用简单的 shell 重定向来输入固定输入,这样您就不必每次都重新输入.
这是一个重复的问题,在java中读取和写入数据的优化方法可以在下面找到link。
这些类对于在编程竞赛中读取输入和写入输出非常有用。
在 java 中获取用户输入的最快方法,特别是竞争性编码是使用 bufferedReader 和 StringTokenizer.[=13 制作自己的 FastReader class =]
此方法利用了 BufferedReader 和 StringTokenizer 的时间优势以及用户定义方法的优势,可以减少输入,从而加快输入速度。这被接受的时间为 1.23 秒,非常推荐这种方法,因为它易于记忆并且速度足够快,可以满足竞争性编码中大多数问题的需求。
实施:
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str = "";
try
{
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
}
在主文件中:
public static void main(String[] args)
{
FastReader s=new FastReader();
int n = s.nextInt();
int k = s.nextInt();
int count = 0;
while (n-- > 0)
{
int x = s.nextInt();
if (x%k == 0)
count++;
}
System.out.println(count);
}
来源Link:https://www.geeksforgeeks.org/fast-io-in-java-in-competitive-programming/
在 Java 中,我使用标准 Scanner
和 BufferedReader
类 进行输入,例如:
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
或
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a=Integer.parseInt(br.readLine());
但是接受这样的输入需要很多 运行 时间。我想知道更快的输入方式。提前致谢
编辑:我见过像 uwi 这样的顶级 java 编码员,他们以非常不同的方式接受输入。他们有点创建自己的 reader class。我不明白他们的程序如何在运行时变快。
来自 dejavu 的引述: “BufferedReader 比 Scanner 快很多,因为它缓冲了字符,所以您不必每次都访问该文件,您想要从中读取一个字符。
扫描仪有特殊用途,例如直接读取原始数据类型,也可用于正则表达式。
我同时使用了 Scanner 和 BufferedReader,BufferedReader 提供了显着的快速性能。你也可以自己测试一下。"
来自:which to choose buffered reader or scanner from performance point of view
在下面的文章中,作者讨论了在控制台中读取用户输入的三种不同方式。每种方式都相当容易使用,也有自己的优点和缺点。
讨论了以下机制并提供了示例。 还有一个优缺点部分。
Link: http://www.codejava.net/java-se/file-io/3-ways-for-reading-input-from-the-user-in-the-console
Link: Most Efficient Way of Taking User Input in Java
选项:
扫描器Class->
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter a number: ");
int n = reader.nextInt();
DataInputStream->
DataInputStream dis = new DataInputStream(System.in);
int i = dis.readInt();
BufferedReader ->
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
String name = reader.readLine();
System.out.println("Your name is: " + name);
控制台->
Console console = System.console();
String s = console.readLine();
int i = Integer.parseInt(console.readLine());
如果您想要一种快速方式通过标准输入进行输入(并且,如果我理解正确的话,您想要一种快速方式来重复向您的程序提供输入),您最好赌注是通过管道或重定向罐头响应,例如
$ java MyReadingClass < mycannedinput.txt
因此您可以构建您的 class 以通过标准输入进行交互式输入,然后使用简单的 shell 重定向来输入固定输入,这样您就不必每次都重新输入.
这是一个重复的问题,在java中读取和写入数据的优化方法可以在下面找到link。
这些类对于在编程竞赛中读取输入和写入输出非常有用。
在 java 中获取用户输入的最快方法,特别是竞争性编码是使用 bufferedReader 和 StringTokenizer.[=13 制作自己的 FastReader class =]
此方法利用了 BufferedReader 和 StringTokenizer 的时间优势以及用户定义方法的优势,可以减少输入,从而加快输入速度。这被接受的时间为 1.23 秒,非常推荐这种方法,因为它易于记忆并且速度足够快,可以满足竞争性编码中大多数问题的需求。
实施:
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str = "";
try
{
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
}
在主文件中:
public static void main(String[] args)
{
FastReader s=new FastReader();
int n = s.nextInt();
int k = s.nextInt();
int count = 0;
while (n-- > 0)
{
int x = s.nextInt();
if (x%k == 0)
count++;
}
System.out.println(count);
}
来源Link:https://www.geeksforgeeks.org/fast-io-in-java-in-competitive-programming/