Олимпиадное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Олимпиадное программирование » Java (Eclipse) » Ввод-вывод данных


Ввод-вывод данных

Сообщений 1 страница 3 из 3

1

Будем благодарны Юле, если она выложит здесь способы ввода-вывода данных (через консоль и файлы).

0

2

Вот, что пишут на 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);
   }
}

0

3

Кстати, при решении задачи Города (Красноярск '07) возникла проблема со вводом данных: не читались числа с плавающей точкой. Решается она просто (спасибо Юле):

Scanner input = new Scanner(new FileReader("CITIES.IN"));
input.useLocale(Locale.ENGLISH);

0


Вы здесь » Олимпиадное программирование » Java (Eclipse) » Ввод-вывод данных