Ir ao conteúdo

Posts recomendados

Postado

eu tô resolvendo um exercicio de programação do URI ONLINE JUDGE, e nele pede para que a entrada termine com final de arquivo (EOF). Pra isso eu usei o Scanner como entrada, porém ficou dando erro de tempo limite excedido, o tempo limite é de 3 segundos e o meu código bateu 5 segundos. Pesquisando um pouco sobre esse erro, vi em alguns fóruns que o Scanner deixa a leitura da entrada mais lento e tinha como sugestão para usar o BufferedReader. Só que não consegui entender como usar o BufferedReader com EOF. 

Com o Scanner bastava fazer isso
*Scanner ler = new Scanner(System.in);

while(ler.hastNext()){

codigo.....

agr com buffered n faço ideia

Meu código:

import java.util.Scanner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class SequênciaDeSequência_URI_2028{
public static void main(String[] args){
	
		String nome = "C:\\Users\\PC\\Desktop\\questaoURIcomEOF.txt";
		try {
			System.setIn(new FileInputStream(new File(nome)));
		}
		catch(FileNotFoundException e){
			System.out.println("Arquivo não encontrado!");
		}
//////////////////////////////////////////////////////////////////	
		
		Scanner input = new Scanner(System.in);
		
		 int N,contador,contarTamanho;
		 int j = 1;
		 while (input.hasNext()) {
           
			 N = input.nextInt();
           
			 if(N>=0 && N<=200) {
				 contador = 0;
				 contarTamanho = 0;
			 
				 String numeros ="0";
			 
			 if(N>0) {
				 for(int i = 1; i<=N; i++) {
					 while(contador<i) {
						 numeros +=" "+ i;
						 contador++;
						 contarTamanho++;
					 }
					 contador = 0;
					 
				 }
				 
				System.out.printf("Caso %d: %d numeros%n" + numeros+"%n%n",j,contarTamanho+1);
				 
			}
			else {
				System.out.println("Caso 1: 1 numero"+"\n" + "0"+"\n");
			}
			j++;
			
			 }
		}
		input.close();

}
}

 

Postado

@zMarlon Com o BufferedReader você vai ter que ler uma linha inteira de cada vez. Ex:

String linha;
try (BufferedReader txtStream = new BufferedReader(new FileReader("Arquivo.txt"))) {
	while ((linha = txtStream.readLine()) != null) {
		System.out.println(linha);
	}
} catch (IOException e) {
	System.err.println("Fu...");
}

A principal diferença na velocidade de leitura entre a classe Scanner e a classe BufferedReader é o tamanho do Buffer, que se não me engano é de 1KB na Scanner e 8KB por padrão na BufferedReader, mas em compensação BufferedReader é thread safe então a diferença que já não era tão significativa diminui mais.

 

Não acho que seja esse o problema, a não ser que o arquivo lido tenha centenas de MBs, talvez o servidor deles tenha algum problema com a classe Scanner.

 

E no caso se você está usando o endereço do arquivo "C:\\Users\\PC\\Desktop\\questaoURIcomEOF.txt", teria que mudar para um caminho relativo.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...