Pessoal estou fazendo um programa com manipulação de arquivos. O primeiro passo é escrever em um documento “.txt” via teclado na
entrada. Depois outro programa deve pegar o arquivo “.txt” que foi feito no primeiro programa e adicionar uma média as notas que foram
enviadas justamente no primeiro programa. No último programa deve-se pegar o “.txt” do segundo programa e mostrar as notas de maior para
menor em outro “.txt”.
Aqui está o código do primeiro programa…
[code]public class DoTeclado
{
public static void main(String[] args)
{
File f = new File(“C:/Documents and Settings/Lucas Moura/Meus documentos/NetBeansProjects/DoTeclado/Notas1.txt”);
// Escrevendo do teclado para o arquivo ".txt"
try
{
Scanner s = new Scanner(System.in);
PrintStream ps = new PrintStream("Notas1.txt");
while(s.hasNextLine())
{
ps.println(s.nextLine());
}
}
catch(FileNotFoundException e)
{
System.out.println(" Arquivo não encontrado ");
}
}
}[/code]
E aqui o código do segundo arquivo que ainda está incompleto:
[code]public class RecebeArq
{
public static void main(String[] args)
{
// O código para poder ler o arquivo do primeiro bloco de notas(.txt)
try
{
InputStream is = new FileInputStream(“C:/Documents and Settings/Lucas Moura/Meus documentos/NetBeansProjects/DoTeclado/Notas1.txt”);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String b = br.readLine();
while(b != null)
{
System.out.println(b);
b = br.readLine();
}
}
catch(IOException e)
{
System.out.println(" Arquivo não encontrado ");
}
// Aqui está enviando para o novo bloco de notas as informações
try
{
Scanner s = new Scanner(System.in);
PrintStream ps = new PrintStream("Notas2.txt");
while(s.hasNextLine())
{
ps.println(s.nextLine());
}
}
catch(FileNotFoundException e)
{
System.out.println(" Arquivo não encontrado ");
}
}
}[/code]
Como vocês podem ver o programa é totalmente voltado para manipulação de arquivos, não possui nada de interface gráfica ou outras coisas mais avançadas.
A minha dúvida é como fazer a média das notas do primeiro programa e como colocar as notas em ordem no terceiro programa ?
Obrigado à todos!
Aqui uma solução supondo que as notas estejam escritas, somente elas, cada uma em uma linha, não se importando com a quantidade de notas
public class RecebeArq
{
public static void main(String[] args)
{
// O código para poder ler o arquivo do primeiro bloco de notas(.txt)
try
{
InputStream is = new FileInputStream("C:/Documents and Settings/Lucas Moura/Meus documentos/NetBeansProjects/DoTeclado/Notas1.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
int[] vet; //vetor para guardar as notas
int cont = 0; //variavel conta a quantidade de notas
String b = br.readLine();
String aux = ""; //variavel auxiliar
//loop lê a linha coloca a String com a nota no aux e um separador e incrementa a variável cont que diz o numero de notas
while(b != null)
{
System.out.println(b);
aux += b + "#";
cont++;
b = br.readLine();
}
vet = new int[cont]; //cria o vetor de acordo com a quantidade de notas
StringTokenizer st = new StringTokenizer(aux, "#"); //tira a string do separador
int media = 0;
for(int i = 0; st.hasMoreTokens(); i++)
{
vet[i] = Integer.parseInt(st.nextToken()); //pega o número tirando o separador e coloca no vetor
media += vet[i]; //soma as notas
}
media = media/cont; //faz a média
System.out.println("Média das notas: "+media);
//algoritmo para ordenacao do vetor de maior para menor
for(int i = 0; i < vet.length; i++)
{
for(int j = 0; j < vet.length-1; j++)
{
if(v[j]<v[j+1]) {
int aux2=v[j];
v[j]=v[j+1];
v[j+1]=aux;
}
}
}
}
catch(IOException e)
{
System.out.println(" Arquivo não encontrado ");
}
// Aqui está enviando para o novo bloco de notas as informações
try
{
PrintStream ps = new PrintStream("Notas2.txt");
for(int i = 0; i < vet.length; i++)
{
ps.println(vet[i]); //coloca no arquivo as notas em ordem decrescente em cada linha
}
}
catch(FileNotFoundException e)
{
System.out.println(" Arquivo não encontrado ");
}
}
}
eu não cheguei a testar mas é provável que funcione, quanto ao algoritmo de ordenação caso você saiba quicksort é melhor utilizar, pois aquele gasta bastante processamento.
qualquer coisa posta aí de novo.
C. Porto te agradeço pela resposta. As notas vão está sim cada uma em sua linha e serão duas notas para cada pessoa(são 5 pessoas). Mas tem outra coisa, antes das notas tem o nome das pessoas também em uma linha a cima das duas notas.
Eu ajustei aqui os acréscimos que tu fez no código, estava dando erro em algumas coisas. Na hora da execução só está apresentando uma única média. Tu pode me explicar melhor o que tu fez aí ? e sabe como fazer para calcular todas médias ?
Obrigado novamente!
Ola, desculpe a demora estava preso com outros assuntos, agora deu tempo de testar o algoritmo, então aqui vai:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.StringTokenizer;
public class RecebeArq {
public static void main(String[] args)
{
int[] vet = null; //vetor para guardar as notas
int cont = 0; //variavel conta a quantidade de notas
String aux = ""; //variavel auxiliar
int[] media = null; //vetor para guardar as medias
int j = 0; //variavel auxiliar
// O código para poder ler o arquivo do primeiro bloco de notas(.txt)
try
{
InputStream is = new FileInputStream("C:/Documents and Settings/Lucas Moura/Meus documentos/NetBeansProjects/DoTeclado/Notas1.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String b = br.readLine();
//loop lê a linha coloca a String com a nota no aux e um separador e incrementa a variável cont que diz o numero de notas
while(b != null)
{
System.out.println(b);
if(b.matches("\\d+")) //verifica se a string na linha correspondente contem apenas numeros
{
aux += b + "#";
cont++;
}
b = br.readLine();
}
vet = new int[cont]; //cria o vetor de acordo com a quantidade de notas
StringTokenizer st = new StringTokenizer(aux, "#"); //tira a string do separador
media = new int[cont/2]; //cria o vetor media com metade das posicoes de vet pois sao 2 notas por aluno
for(int i = 0; st.hasMoreTokens(); i++)
{
if(i+1 == vet.length) //apenas para a ultima posicao do vet
{
vet[i] = Integer.parseInt(st.nextToken());
media[j] += vet[i];
media[j] /= 2;
}
else
{
if (i > 0 && i%2==0)
{
media[j] /= 2;
j++;
}
vet[i] = Integer.parseInt(st.nextToken()); //pega o número tirando ja sem o separador
media[j] += vet[i]; //soma as notas
}
}
//algoritmo para ordenacao do vetor de maior para menor --- bubble sort
for(int i = 0; i < media.length; i++)
{
for(int y = 0; y < media.length-1; y++)
{
if(media[y] < media[y+1]) {
int aux2 = media[y];
media[y]= media[y+1];
media[y+1] = aux2;
}
}
}
}
catch(IOException e)
{
System.out.println(" Arquivo não encontrado ");
}
// Aqui está enviando para o novo bloco de notas as informações
try
{
PrintStream ps = new PrintStream("Notas2.txt");
for(int i = 0; i < media.length; i++)
{
ps.println("Media"+i+": "+media[i]); //coloca no arquivo as notas em cada linha.
}
}
catch(FileNotFoundException e)
{
System.out.println(" Arquivo não encontrado ");
}
}
}
qualquer dúvida sobre o código posta aí.