Будем благодарны Юле, если она выложит здесь способы ввода-вывода данных (через консоль и файлы).
Ввод-вывод данных
Сообщений 1 страница 3 из 3
Поделиться22007-11-08 09:30:30
Вот, что пишут на http://acm.timus.ru по этому поводу:
Ввод/вывод в Java может стать очень медленным, если пользоваться им неправильно. Вот несколько правил, соблюдая которые, вы сможете избежать проблем, связанных со вводом/выводом:
* Scanner является самым удобным средством для чтения входных данных в большинстве задач, но скорость его работы оставляет желать лучшего. Используйте его только для чтения небольших входных данных.
* BufferedReader обеспечивает достаточно быстрый ввод для большинства задач. Но самостоятельно этот класс позволяет лишь читать отдельные символы и строки. Для чтения токенов и чисел используйте StringTokenizer или StreamTokenizer.
* PrintWriter подходит для всех случаев и работает достаточно быстро. Но его метод printf работает медленно; также медленно работают вызовы типа println(a + " " + b). Выводите по одной переменной за раз, и тогда вы добьетесь максимальной эффективности.
Вот пример эффективного использования классов StreamTokenizer и PrintWriter (задача — вывести через пробел сумму и разность чисел A и B, записанных во входных данных):
import java.io.*;
import java.util.*;
public class SumDif
{
public static void main(String[] args) throws IOException
{
new SumDif().run();
}
StreamTokenizer in;
PrintWriter out;
int nextInt() throws IOException
{
in.nextToken();
return (int)in.nval;
}
void run() throws IOException
{
in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
out = new PrintWriter(new OutputStreamWriter(System.out));
solve();
out.flush();
}
void solve() throws IOException
{
int a = nextInt();
int b = nextInt();
out.print(a + b);
out.print(" ");
out.println(a - b);
}
}
Поделиться32007-11-08 09:33:53
Кстати, при решении задачи Города (Красноярск '07) возникла проблема со вводом данных: не читались числа с плавающей точкой. Решается она просто (спасибо Юле):
Scanner input = new Scanner(new FileReader("CITIES.IN"));
input.useLocale(Locale.ENGLISH);