Ajuda em Java, ler e editar arquivo txt

10 respostas
L

Boa tarde. Sou novo em Java e gostaria que me ajudassem.
Estou com esse exercício e não consegui faze-lo:

Você deve desenvolver um programa que calcule o dígito verificador para uma série de matrículas da empresa SEUTIME.

Dada uma matrícula de 0000 a 9999 o cálculo do dígito verificador deverá ser feito multiplicando o primeiro número a esquerda por 5, o segundo por 4, o terceiro por 3 e o quarto por 2. O resultado parcial de cada posição deve ser somado e o resultado final da soma deverá ser dividido por 16. O resto desta divisão deverá ser convertido para hexadecimal, sendo este então o dígito verificador.

Exemplo: matrícula = 9876

Cálculo: 9 * 5 = 45 / 8 * 4 = 32 / 7 * 3 = 21 / 6 * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110

Resto da divisão de 110 por 16 é igual a 14.

O número 14 em base 16 é “E”. Este é o dígito verificador da matrícula.
Matrícula completa = 9876-E

Pede-se:

1- Ler as matrículas que estão no arquivo matriculasSemDV.txt e gerar um arquivo de saída matriculasComDV.txt com as matrículas completas, conforme regra de formação descrita acima.
Exemplo:
matriculasSemDV.txt
9876
9992

matriculasComDV.txt
9876-E
9992-0

2- Ler as matrículas que estão no arquivo matriculasParaVerificar.txt e gerar um arquivo matriculasVerificadas.txt com as matrículas e um indicador de “verdadeiro” ou “falso” ao lado de cada matrícula, separado por espaço.
Exemplo:
matriculasParaVerificar.txt
9876-E
9992-2

matriculasVerificadas.txt
9876-E verdadeiro
9992-2 falso


já fiz isso :
//ler o arquivo
try(Scanner scanner = new Scanner (new FileInputStream (“C:\Users\Leonardo\Desktop\SoftblueJAVA\matriculasSemDV.txt”))){

while (scanner.hasNext()) {
			String s = scanner.nextLine();
			//s += line + "\n";
				
				System.out.println(s);

//conta sem ler do arquivo
float[] array = new float[7];

//digita 4 numeros para fazer a conta.
	try (Scanner entrada = new Scanner(System.in)) {
		
		
	
	System.out.println("Valores: ");
	array[0] = entrada.nextFloat();
	array[1] = entrada.nextFloat();
	array[2] = entrada.nextFloat();
	array[3] = entrada.nextFloat();
	
	
	
	//conta [0] * 5 = 45 / [1] * 4 = 32 / [2] * 3 = 21 / [3] * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110
	
	 float conta1 = (array[0] * 5) + (array[1] * 4) + (array[2] * 3) + (array[3] * 2);
	
	System.out.println(conta1);
	
	
	// divisão por 16
	
	float conta2 = conta1 % 16;
	
	System.out.println(conta2);
			
	//convertento para hexadecimal
	
	
	String total = Integer.toHexString((int) conta2);
	
	
	
	System.out.println(total);

10 Respostas

darlan_machado

E o que você já fez?

L

bom dia.
eu consigo ler o arquivo usando a classe Scanner.
A conta eu fiz com array, o meu problema é transformar (seperar) os dados do arquivo em array para aplicar a conta. E depois criar o segundo arquivo com a inclusão de uma nova coluna.
vou tentar refazer os codigos aqui, pq ja refiz com varias pesquisas da net e esta uma bagunça rs.

Ler arquivo –

try(Scanner scanner = new Scanner (new FileInputStream (“C:\Users\Leonardo\Desktop\SoftblueJAVA\matriculasSemDV.txt”))){

while (scanner.hasNext()) {
			String s = scanner.nextLine();
			//s += line + "\n";
				
				System.out.println(s);

conta - sem ler o arquivo –

float[] array = new float[7];
	
	
//digita 4 numeros para fazer a conta.
	try (Scanner entrada = new Scanner(System.in)) {
		
		
	
	System.out.println("Valores: ");
	array[0] = entrada.nextFloat();
	array[1] = entrada.nextFloat();
	array[2] = entrada.nextFloat();
	array[3] = entrada.nextFloat();
	
	
	
	//conta [0] * 5 = 45 / [1] * 4 = 32 / [2] * 3 = 21 / [3] * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110
	
	 float conta1 = (array[0] * 5) + (array[1] * 4) + (array[2] * 3) + (array[3] * 2);
	
	System.out.println(conta1);
	
	
	// divisão por 16
	
	float conta2 = conta1 % 16;
	
	System.out.println(conta2);
			
	//convertento para hexadecimal
	
	
	String total = Integer.toHexString((int) conta2);
	
	
	
	System.out.println(total);
darlan_machado

Você lê cada linha como uma String. Cada matrícula deve ser uma linha diferente, não?
Como é uma String, você consegue quebrar em chars e, cada char pode ser convertido para int

char[] numbers = s.toCharArray();
int p1 = Character.getNumericValue(number[0]);
int v1 = p1 * 5;

Entendeu?

L

Entendi !!!

segue:

char[] number = s.toCharArray();

int p1 = Character.getNumericValue(number[0]);

int p2 = Character.getNumericValue(number[1]);

int p3 = Character.getNumericValue(number[2]);

int p4 = Character.getNumericValue(number[3]);
int conta1 = (number[0] * 5) + (number[1] * 4) + (number[2] * 3) + (number[3] * 2);
			
			int conta2 = conta1 % 16;
			
			String total = Integer.toHexString((int) conta2);
							
			System.out.println(total);

agora entendi, qnd eu transformo em array eu crio automaticamente para todas as linhas, não estava entendendo isso, vou tentar criar um arquivo com esses dados agora…
vlw !!!

darlan_machado

Bem isso, fera.
Escrever é fácil.
Depois, validar é só efetuar o mesmo processo.

L

Obrigado mesmo. Mais uma duvida.
eu não consigo escrever todos os dados que estão na variavel direto pro arquivo. eu tenho uma variavel com 5 linas.
ex:
String comDV = s + “-” + total;

System.out.println(comDV);
			
			
			
			try(PrintStream ps = new PrintStream(new FileOutputStream ("C:\\Users\\Leonardo\\Desktop\\SoftblueJAVA\\matriculasComDV.txt"))){
				ps.print(comDV);

o PrintStream ou FileWriter só incluem a ultima linha da variavel.

darlan_machado

Teoricamente, eles deveriam escrever tudo o que for passado para eles.

Douglas.Souza

Bom dia ! Você tem este programa completo no github ou em zip ?

carlos_eduardo_ferre

Leo vc tem esse arquivo .zip ou pelo git:

Boa tarde. Sou novo em Java e gostaria que me ajudassem.
Estou com esse exercício e não consegui faze-lo:

Você deve desenvolver um programa que calcule o dígito verificador para uma série de matrículas da empresa SEUTIME.

Dada uma matrícula de 0000 a 9999 o cálculo do dígito verificador deverá ser feito multiplicando o primeiro número a esquerda por 5, o segundo por 4, o terceiro por 3 e o quarto por 2. O resultado parcial de cada posição deve ser somado e o resultado final da soma deverá ser dividido por 16. O resto desta divisão deverá ser convertido para hexadecimal, sendo este então o dígito verificador.

Exemplo: matrícula = 9876

Cálculo: 9 * 5 = 45 / 8 * 4 = 32 / 7 * 3 = 21 / 6 * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110

Resto da divisão de 110 por 16 é igual a 14.

O número 14 em base 16 é “E”. Este é o dígito verificador da matrícula.
Matrícula completa = 9876-E

Pede-se:

1- Ler as matrículas que estão no arquivo matriculasSemDV.txt e gerar um arquivo de saída matriculasComDV.txt com as matrículas completas, conforme regra de formação descrita acima.
Exemplo:
matriculasSemDV.txt
9876
9992

matriculasComDV.txt
9876-E
9992-0

2- Ler as matrículas que estão no arquivo matriculasParaVerificar.txt e gerar um arquivo matriculasVerificadas.txt com as matrículas e um indicador de “verdadeiro” ou “falso” ao lado de cada matrícula, separado por espaço.
Exemplo:
matriculasParaVerificar.txt
9876-E
9992-2

matriculasVerificadas.txt
9876-E verdadeiro
9992-2 falso

R

te passaram esse programa em zip?

Criado 29 de maio de 2018
Ultima resposta 21 de jan. de 2021
Respostas 10
Participantes 5