Boa tarde!
Sou iniciante em Java e estou precisando de ajuda.
Vou postar todo o código com o maior número possível de informações pois estou precisando de ajuda para entender melhor.
Criei um programa que permite digitar o nome do arquivo.txt que será lido.
Como exemplo, estou usando o arquivo teste.txt com o seguinte conteúdo:
03-02-2020/6/Pune/ATP250/610000 $/J. Vesely
03-02-2020/6/Cordoba/ATP250/610000 $/C. Garin
03-02-2020/6/Montpellier/ATP250/606350 $/G. Monfils
10-02-2020/7/Rotterdam/ATP500/2155295 $/G. Monfils
10-02-2020/6/New York/ATP250/804180 $/K. Edmund
10-02-2020/6/Buenos Aires/ATP250/696280 $/C. Ruud
09-02-2020/6/Buenos Aires/ATP250/696280 $/C. Ruud
O intuito do programa é imprimir o seguinte resultado, dada as informações do txt:
Jogador com o maior nº de pontos:
G. Monfils - 750
Jogador com maior valor em premiação:
G. Monfils - $ 2.761.645,00
Ranking Atual dos Jogadores:
Nome Jogador - Total de Pontos - Nº de Vitórias
G. Monfils 750 2
C. Ruud 500 2
C. Garin 250 1
J. Vesely 250 1
K. Edmund 250 1
Torneios com Datas Conflitantes:
10-02-2020 3
03-02-2020 3
03-02-2020 - J. Vesely
03-02-2020 - C. Garin
03-02-2020 - G. Monfils
10-02-2020 - G. Monfils
10-02-2020 - K. Edmund
10-02-2020 - C. Ruud
Mas estou com erro ao listar os torneios com datas conflitantes. Todo o resto funciona, menos essa parte. Nesse teste, está faltando 1 evento do dia 10. Testei com um arquivo maior e com mais datas e imprimiu eventos que não são das datas já listadas como eventos com datas conflitantes. Segue
Jogador com o maior nº de pontos:
G. Monfils - 750
Jogador com maior valor em premiação:
G. Monfils - $ 2.761.645,00
Ranking Atual dos Jogadores:
Nome Jogador - Total de Pontos - Nº de Vitórias
G. Monfils 750 2
C. Ruud 500 2
C. Garin 250 1
J. Vesely 250 1
K. Edmund 250 1
Torneios com Datas Conflitantes:
Data: 10-02-2020 Quantidade de vezes: 3
Data: 03-02-2020 Quantidade de vezes: 3
10-02-2020 Buenos Aires
10-02-2020 New York
03-02-2020 Montpellier
03-02-2020 Cordoba
03-02-2020 Pune
Segue meu código:
Principal.java
import javax.swing.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
public class Principal {
public static void main(String[] args) throws IOException {
try {
BufferedReader in = new BufferedReader(new FileReader(("../AD2 - LARISSA MACHADO - POO 2020.1/src/" + (JOptionPane.showInputDialog("Informe o nome do arquivo .txt existente nesse diretório a ser lido:" + "\n" + "Exemplo: arquivo.txt")))));
try {
ListaJogador lj = new ListaJogador();
ListaData ld = new ListaData();
String s, tipo;
int valorTipo;
String[] pont;
String vs[];
while ((s = in.readLine()) != null) {
vs = s.split("/");
tipo = vs[3].substring(0, 3);
if (tipo.contains("ATP")) {
valorTipo = Integer.parseInt(vs[3].substring(3, 6));
} else {
valorTipo = 2000;
}
pont = vs[4].split(" ");
lj.insere_lista_jogador(vs[0], vs[5], vs[2], Integer.parseInt(vs[1]), valorTipo,
Float.parseFloat(pont[0]));
ld.insere_lista_data(vs[0], vs[5], Integer.parseInt(vs[1]), valorTipo, Float.parseFloat(pont[0]));
}
in.close();
DecimalFormat df = new DecimalFormat("#,###.00");
System.out.println("Jogador com o maior nº de pontos:");
Ordena_Pontos(lj);
System.out.println(lj.prim.nome_jog + " - " + lj.prim.pontos_jog);
System.out.println("");
System.out.println("");
System.out.println("Jogador com maior valor em premiação: ");
Ordena_Valores_Premios(lj);
System.out.println(lj.prim.nome_jog + " - " + " $ " + df.format(lj.prim.premio_jog));
System.out.println("");
System.out.println("");
System.out.println("Ranking Atual dos Jogadores:");
System.out.println("Nome Jogador - Total de Pontos - Nº de Vitórias");
System.out.println("");
Ordena_Ranking(lj);
System.out.println(lj);
System.out.println("Torneios com Datas Conflitantes:");
Lista_Datas_Conflitantes(ld);
System.out.print(ld);
Lista_Jogos_Datas_Conflitantes(lj, ld);
} catch (Exception e) {
System.out.println("Excecao\n");
}
} catch (Exception e) {
System.out.println("Arquivo não encontrado");
}
}
public static void Ordena_Pontos(ListaJogador lj) {
Jogador p, q, maior;
for (p = lj.prim; p != null; p = p.prox) {
maior = p;
for (q = p.prox; q != null; q = q.prox) {
if (maior.pontos_jog < q.pontos_jog)
maior = q;
else if ((maior.pontos_jog == q.pontos_jog) && (maior.premio_jog
< q.premio_jog))
maior = q;
else if ((maior.pontos_jog == q.pontos_jog) &&
(maior.premio_jog == q.premio_jog) && (maior.num_vit_jog <
q.num_vit_jog))
maior = q;
}
if (maior != p) {
String n = p.nome_jog;
p.nome_jog = maior.nome_jog;
maior.nome_jog = n;
int aux = p.num_vit_jog;
p.num_vit_jog = maior.num_vit_jog;
maior.num_vit_jog = aux;
aux = p.premio_jog;
p.premio_jog = maior.premio_jog;
maior.premio_jog = aux;
int pr = p.pontos_jog;
p.pontos_jog = maior.pontos_jog;
maior.pontos_jog = pr;
Torneio t = p.prim;
p.prim = maior.prim;
maior.prim = t;
}
}
}
public static void Ordena_Valores_Premios(ListaJogador lj) {
Jogador p, q, maior;
for (p = lj.prim; p != null; p = p.prox) {
maior = p;
for (q = p.prox; q != null; q = q.prox) {
if (maior.premio_jog < q.premio_jog)
maior = q;
else if ((maior.premio_jog == q.premio_jog) && (maior.pontos_jog
< q.pontos_jog))
maior = q;
else if ((maior.premio_jog == q.premio_jog) &&
(maior.pontos_jog == q.pontos_jog) && (maior.num_vit_jog <
q.num_vit_jog))
maior = q;
}
if (maior != p) {
String n = p.nome_jog;
p.nome_jog = maior.nome_jog;
maior.nome_jog = n;
int aux = p.num_vit_jog;
p.num_vit_jog = maior.num_vit_jog;
maior.num_vit_jog = aux;
aux = p.pontos_jog;
p.pontos_jog = maior.pontos_jog;
maior.pontos_jog = aux;
int pr = p.premio_jog;
p.premio_jog = maior.premio_jog;
maior.premio_jog = pr;
Torneio t = p.prim;
p.prim = maior.prim;
maior.prim = t;
}
}
}
public static void Ordena_Ranking(ListaJogador lj) {
Jogador p, q, maior;
for (p = lj.prim; p != null; p = p.prox) {
maior = p;
for (q = p.prox; q != null; q = q.prox) {
int comparacao = maior.nome_jog.compareTo(q.nome_jog);
if (maior.num_vit_jog < q.num_vit_jog)
maior = q;
else if ((maior.num_vit_jog == q.num_vit_jog) &&
(maior.pontos_jog < q.pontos_jog))
maior = q;
else if ((maior.num_vit_jog == q.num_vit_jog) &&
(maior.pontos_jog == q.pontos_jog) && comparacao > 0)
maior = q;
}
if (maior != p) {
String n = p.nome_jog;
p.nome_jog = maior.nome_jog;
maior.nome_jog = n;
int aux = p.num_vit_jog;
p.num_vit_jog = maior.num_vit_jog;
maior.num_vit_jog = aux;
aux = p.pontos_jog;
p.pontos_jog = maior.pontos_jog;
maior.pontos_jog = aux;
Torneio t = p.prim;
p.prim = maior.prim;
maior.prim = t;
}
}
}
public static void Lista_Datas_Conflitantes(ListaData ld) {
Data p, q, maior;
for (p = ld.prim; p != null; p = p.prox) {
maior = p;
for (q = p.prox; q != null; q = q.prox) {
int comparacao = maior.data.compareTo(q.data);
if (maior.num_vit_jog < q.num_vit_jog)
maior = q;
else if ((maior.num_vit_jog == q.num_vit_jog) &&
(maior.pontos_jog < q.pontos_jog))
maior = q;
else if ((maior.num_vit_jog == q.num_vit_jog) &&
(maior.pontos_jog == q.pontos_jog) && comparacao > 0)
maior = q;
}
if (maior != p) {
String n = p.data;
p.data = maior.data;
maior.data = n;
int aux = p.num_vit_jog;
p.num_vit_jog = maior.num_vit_jog;
maior.num_vit_jog = aux;
aux = p.pontos_jog;
p.pontos_jog = maior.pontos_jog;
maior.pontos_jog = aux;
Torneio t = p.prim;
p.prim = maior.prim;
maior.prim = t;
}
}
}
public static void Lista_Jogos_Datas_Conflitantes(ListaJogador lj, ListaData ld) {
List<String> dataJogador = new ArrayList();
List<String> dataLista = new ArrayList<>();
Data p;
Jogador jogos;
for (p = ld.prim; p != null; p = p.prox) {
dataJogador.add(p.data + " " + p.nome_jogador);
for (jogos = lj.prim; jogos != null; jogos = jogos.prox) {
dataLista.add(jogos.data + " " + jogos.nome_jog);
if (jogos.data.equals(p.data)) {
System.out.println(p.data + " " + jogos.cidade);
}
}
}
}
}
Data.java
class Data {
String data, nome_jogador;
int num_vit_jog, pontos_jog, premio_jog;
Torneio prim;
Data prox;
Data(String d, String n) {
data = d;
nome_jogador = n;
num_vit_jog = pontos_jog = 0;
premio_jog = 0;
prim = null;
prox = null;
}
void insere_torneio(int d, int ptos, float p) {
num_vit_jog++;
pontos_jog += ptos;
premio_jog += p;
Torneio q = new Torneio(d, ptos, p);
q.prox = prim;
prim = q;
}
public String toString() {
String s = "";
for (int i = 0; i < num_vit_jog; i++) {
if (num_vit_jog > 1) {
return ("Data:" + " " + data + " " + "Quantidade de vezes: " + num_vit_jog);
}
Torneio p = prim;
while (p != null) {
p = p.prox;
}
}
return s;
}
}
Jogador.java
class Jogador {
String nome_jog, data, cidade;
int num_vit_jog, pontos_jog, premio_jog;
Torneio prim;
Jogador prox;
Jogador(String d, String n, String c){
data = d;
nome_jog = n;
cidade = c;
num_vit_jog = pontos_jog = 0;
premio_jog = 0;
prim = null;
prox = null;
}
void insere_torneio(int d, int ptos, float p){
num_vit_jog++;
pontos_jog += ptos;
premio_jog += p;
Torneio q = new Torneio(d, ptos, p);
q.prox = prim;
prim = q;
}
public String toString(){
String resp = nome_jog + " " + pontos_jog + " " + num_vit_jog;
Torneio p = prim;
while(p != null){
p = p.prox;
}
return resp;
}
}
ListaData.java
class ListaData {
Data prim;
ListaData(){
prim = null;
}
Data pertence(String n){
Data p = prim;
while((p != null) && (!n.equals(p.data))) p = p.prox;
return p;
}
void insere_lista_data(String data, String nome, int d, int ptos, float p){
Data q = pertence(data);
if(q == null){
q = new Data(data, nome);
q.prox = prim;
prim = q;
}
q.insere_torneio (d, ptos, p);
}
public String toString(){
Data p = prim;
String resp = "";
while(p != null){
resp += p.toString();
resp += "\n";
p = p.prox;
}
return resp;
}
}
ListaJogador.java
class ListaJogador {
Jogador prim;
ListaJogador(){
prim = null;
}
Jogador pertence(String n){
Jogador p = prim;
while((p != null) && (!n.equals(p.nome_jog))) p = p.prox;
return p;
}
void insere_lista_jogador(String data, String nj, String cidade, int d, int ptos, float p){
Jogador q = pertence(nj);
if(q == null){
q = new Jogador(data, nj, cidade);
q.prox = prim;
prim = q;
}
q.insere_torneio (d, ptos, p);
}
public String toString(){
Jogador p = prim;
String resp = "";
while(p != null){
resp += p.toString();
resp += "\n";
p = p.prox;
}
return resp;
}
}
Torneio.java
class Torneio{
int duracao, pontos;
float premio;
Torneio prox;
Torneio(int d, int ptos, float p){
pontos = ptos;
premio = p;
duracao = d;
prox = null;
}
public String toString(){
return duracao + "\n";
}
}
Arquivo usado para testar:
teste.txt
03-02-2020/6/Pune/ATP250/610000 $/J. Vesely
03-02-2020/6/Cordoba/ATP250/610000 $/C. Garin
03-02-2020/6/Montpellier/ATP250/606350 $/G. Monfils
10-02-2020/7/Rotterdam/ATP500/2155295 $/G. Monfils
10-02-2020/6/New York/ATP250/804180 $/K. Edmund
10-02-2020/6/Buenos Aires/ATP250/696280 $/C. Ruud
09-02-2020/6/Buenos Aires/ATP250/696280 $/C. Ruud
Poderiam me ajudar por favor?
Muito obrigada!