Olá,
Nao estou entendendo este programa.Pesquisei em apostilas,artigos mas nao enconterei nada referente a isso.
Porque o programa compila e imprimi “28”???
Outra coisa que eu nao entendi é esse “atfd”. Alguem poderia por favor me explicar?
import java.io.*
public class RandFile {
public static void main(String[ ] atfd) trows IOException {
FileOutputStream fos =new FileOutputStream("file") ;
for ( int i = 500 ; i<600 ; i++) {
fos.write(i) ;
}
fos.close() ;
RandomAcessFile raf =new RandowAcessFile("file", "r") ;
raf.seek (40);
System.out.println (raf.read() ) ;
raf.close();
}
}
Ola,
Bom, vamos por partes… o “atfd” são os argumentos da linha de comando… geralmente as pessoas colocam o nome desta variável de “arg” ou “args”, mas não precisa necessáriamente ser estes… quem fez o programa que vc postou queria mudar um pouco… sem problemas…
Em relação a ele imprimir “28” é simples, o método read() da classe RandomAcessFile lê um byte e retorna um inteiro informando o proximo byte ou -1 caso seja o final do arquivo, e logo se imprime na saida padrão… na linha:
System.out.println (raf.read() ) ;
Entendeu???
Mais ou menos. O arquivo que ele esta lendo vai ser os numeros de 500 ate 600. É isso mesmo?
Tem como voce explicar dando algum exemplo?
[quote=“AlunoJava”]Mais ou menos. O arquivo que ele esta lendo vai ser os numeros de 500 ate 600. É isso mesmo?
Tem como voce explicar dando algum exemplo?[/quote]
Não, ele vai escrever os números que correspondem ao byte 500, 501…, 599, 600.
Faça assim que vai ver o que ele está escrevendo em “outro idioma”:
[code]import java.io.*;
public class RandFile {
public static void main(String[ ] atfd) throws IOException
{
FileOutputStream fos =new FileOutputStream("file") ;
for ( int i = 500 ; i<600 ; i++) {
fos.write(i) ;
System.out.println(Byte.toString( (new Integer(i)).byteValue() ));
}
fos.close() ;
RandomAccessFile raf =new RandomAccessFile("file", "r") ;
raf.seek (40);
System.out.println (raf.read() ) ;
raf.close();
}
} [/code]
E o raf.seek (40); vai ser o 40° item escrito no arquivo.
Deixa ver se eu entendi victor.
Mas entao o quadragesimo(40º) item escrito vai ser “540”???
Porque o programa imprimi “28”?? Da onde saiu esse 28?
Ele não está escrevendo a sequencia de inteiros 500, 501…, 599, 600.
Ele está escrevendo o Byte 500, Byte 501, Byte 502…, Byte 600.
Por sinal, o Byte 540 vai significar 28. Tente colocar o print que eu colei no post anterior, que ele vai transformar os Bytes em numeros pra você entender.
Obrigado!!! Vou testar sim, é que estou trabalhando por isso eu nao testei ainda.
Este programa é um exercicio escrito de um concurso militar, seria possivel resolver ele só analisando o programa? Tinha a opcao de resposta que o programa imprimi “C) 540” e a opcao que o programa imprimi “D) 28”.
byte vai de -128 a 127, certo?
540 cabe aí? Não.
Depois que passa do 127 volta no -128 e vai somando…
Da primeira vez que chega no 0 temos 256, na segunda 512.
Para chegar no 540…
Bingo! 28.
Legal!!!Entendi!!! 
Obrigado pela grande dica JavaDrops, ficou mais claro ainda.
Obrigado a todos pela valiosa ajuda, ao victor e ao bruno.