Ir ao conteúdo
  • Cadastre-se

rmbelmont

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

2
  1. Eu sou iniciante em Java e estou tentando executar o código do algoritmo de emparelhamento estável Gale Shapley , mas ao executar o código abaixo, aparece o o seguinte erro: ```` Error: For input string: "3 " Exception in thread "main" java.lang.NullPointerException at br.com.entrada.MarriageAlgorithm.<init>(MarriageAlgorithm.java:20) at br.com.entrada.MarriageAlgorithm.main(MarriageAlgorithm.java:154) ```` Segue abaixo o arquvo de entrada: input.txt: ```` 3 male preference array 1 3 2 1 2 3 2 3 1 female preference array 1 3 2 2 1 3 2 1 3 ```` Percebi que o programa está lendo apenas a primeira linha do input.txt, mas não estou sabendo como resolver isso. ```` import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; public class GaleShapley { private int N, engagedCount; private String[][] menPref; private String[][] womenPref; private String[] men; private String[] women; private String[] womenPartner; private boolean[] menEngaged; /** Constructor **/ public GaleShapley(String[] m, String[] w, String[][] mp, String[][] wp) { N = mp.length; engagedCount = 0; men = m; women = w; menPref = mp; womenPref = wp; menEngaged = new boolean[N]; womenPartner = new String[N]; calcMatches(); } /** function to calculate all matches **/ private void calcMatches() { while (engagedCount < N) { int free; for (free = 0; free < N; free++) if (!menEngaged[free]) break; for (int i = 0; i < N && !menEngaged[free]; i++) { int index = womenIndexOf(menPref[free]); if (womenPartner[index] == null) { womenPartner[index] = men[free]; menEngaged[free] = true; engagedCount++; } else { String currentPartner = womenPartner[index]; if (morePreference(currentPartner, men[free], index)) { womenPartner[index] = men[free]; menEngaged[free] = true; menEngaged[menIndexOf(currentPartner)] = false; } } } } printCouples(); } /** function to check if women prefers new partner over old assigned partner **/ private boolean morePreference(String curPartner, String newPartner, int index) { for (int i = 0; i < N; i++) { if (womenPref[index].equals(newPartner)) return true; if (womenPref[index].equals(curPartner)) return false; } return false; } /** get men index **/ private int menIndexOf(String str) { for (int i = 0; i < N; i++) if (men.equals(str)) return i; return -1; } /** get women index **/ private int womenIndexOf(String str) { for (int i = 0; i < N; i++) if (women.equals(str)) return i; return -1; } /** print couples **/ public void printCouples() { System.out.println("Couples are : "); for (int i = 0; i < N; i++) { System.out.println(womenPartner +" "+ women); } } /** main function **/ public static void main(String[] args) { System.out.println("Gale Shapley Marriage Algorithm\n"); /** list of men **/ String[] m = {"1", "2", "3"}; /** list of women **/ String[] w = {"1", "2", "3"}; /** men preference **/ String[][] mp = null ; /** women preference **/ String[][] wp= null ; // Input.txt is like // 3 <--defines the size of array // male preference array // 1 3 2 // 1 2 3 // 2 3 1 //female preference array //1 3 2 //2 1 3 //2 1 3 try{ FileInputStream fstream = new FileInputStream("input.txt"); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine; int line=0; int k=0; int n=0; int i=0; while ((strLine = br.readLine()) != null) { if(line==0){ n =Integer.valueOf(strLine); mp=new String[n][n]; wp=new String[n][n]; line++; } else{ String[] preferences=strLine.split(" "); if(i<n){ mp=preferences; } else{ wp[i-n]=preferences; } i++; } } in.close(); }catch (Exception e){//Catch exception if any System.err.println("Error: " + e.getMessage()); } GaleShapley gs = new GaleShapley(m, w, mp, wp); } } ```` O programa não está lendo o arquivo de entrada input.txt por completo. Ele está lendo apenas a primeira linha deste arquivo. E não estou conseguindo resolver isto. Acho que o problema deve estar na parte do código abaixo. ```` while ((strLine = br.readLine()) != null) { if(line==0){ n =Integer.valueOf(strLine); mp=new String[n][n]; wp=new String[n][n]; line++; } else{ String[] preferences=strLine.split(" "); if(i<n){ mp=preferences; } else{ wp[i-n]=preferences; } i++; } }
  2. Estou iniciando no Java 8 e gostaria de transformar o comando em SQL abaixo em uma função lambda ou Stream: SELECT * FROM CorrespondenciaCandidata c, (SELECT entidadeOrigem, MAX(m1) similaridadeMaxima FROM CorrespondenciaCandidata WHERE m1 <> 0 GROUP BY entidadeOrigem) r WHERE c.entidadeOrigem = r.entidadeOrigem AND c.m1 = r.similaridadeMaxima Estou iniciando no Java 8 e gostaria de transformar o comando em SQL abaixo em uma função lambda: SELECT * FROM CorrespondenciaCandidata c, (SELECT entidadeOrigem, MAX(m1) similaridadeMaxima FROM CorrespondenciaCandidata WHERE m1 <> 0 GROUP BY entidadeOrigem) r WHERE c.entidadeOrigem = r.entidadeOrigem AND c.m1 = r.similaridadeMaxima Criei a Classe Correspondência com getters e setters int codigo; String nome; String entidadeOrigem; String EntidadeDestino; double m1; double m2; double m3; double medMax; double dem; public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEntidadeOrigem() { return entidadeOrigem; } public void setEntidadeOrigem(String entidadeOrigem) { this.entidadeOrigem = entidadeOrigem; } public String getEntidadeDestino() { return EntidadeDestino; } public void setEntidadeDestino(String entidadeDestino) { EntidadeDestino = entidadeDestino; } public double getM1() { return m1; } public void setM1(double m1) { this.m1 = m1; } public double getM2() { return m2; } public void setM2(double m2) { this.m2 = m2; } public double getM3() { return m3; } public void setM3(double m3) { this.m3 = m3; } public double getMedMax() { return medMax; } public void setMedMax(double medMax) { this.medMax = medMax; } public double getDem() { return dem; } public void setDem(double dem) { this.dem = dem; } Criei a List <Correspondencia> cor = ArrayList<>(). E inseri elementos neste ArrayList. List <Correspondencia> = new ArrayList<>(); cor.add(new Correspondencia(41,"Paper_Organization","Paper", "Organization",0,0,0.14,0.04,0.23,0.08")); cor.add(new Correspondencia(11,"email_hasanemail","email", "hasanemail",0,0.19,0.21,0.19,0,0.12)); cor.add(new Correspondencia(31,"Review_Reviewer","Review","Reviewer",0,0.36,0.5,0.41,0,0.25)); cor.add(new Correspondencia(01,"PaperAbstract_Abstract","PaperAbstract","Abstract", 0,0.33,0.45,0.32,0,0.22)); Agora quero filtrar o curso com LAMBDA ou STREAM de acordo com a query SELECT * FROM CorrespondenciaCandidata c, (SELECT entidadeOrigem, MAX(m1) similaridadeMaxima FROM CorrespondenciaCandidata WHERE m1 <> 0 GROUP BY entidadeOrigem) r WHERE c.entidadeOrigem = r.entidadeOrigem AND c.m1 = r.similaridadeMaxima
  3. Estou usando um ArrayList da Classe Candidatas abaixo: É uma ArrayList de Classe Java. public class Candidatas { public String entidade1; public String entidade2; public double m1; public double m2; public double m3; public double m4; public double m5; public double m6; public String tipo; public double mm; public String id; public double mm1; public String getEntidade1() { return entidade1; } public void setEntidade1(String entidade1) { this.entidade1 = entidade1; } public String getEntidade2() { return entidade2; } public void setEntidade2(String entidade2) { this.entidade2 = entidade2; } public double getM1() { return m1; } public void setM1(double m1) { this.m1 = m1; } public double getM2() { return m2; } public void setM2(double m2) { this.m2 = m2; } public double getM3() { return m3; } public void setM3(double m3) { t this.m3 = m3; } public double getM4() { return m4; } public void setM4(double m4) { this.m4 = m4; } public double getM5() { return m5; } public void setM5(double m5) { this.m5 = m5; } public double getM6() { return m6; } public void setM6(double m6) { this.m6 = m6; } public String getTipo() { return tipo; } public void setTipo(String tipo) { this.tipo = tipo; } public double getMm() { return mm; } public void setMm(double mm) { this.mm = mm; } public String getId() { return id; } public void setId(String id) { this.id = id; } public double getMm1() { return mm1; } public void setMm1(double mm1) { this.mm1 = mm1; } }
  4. Poderia me ajudar! Estou gerando apenas uma iteração com o For. To com dificuldades de entender como executar com o do-while.
  5. Olá Pessoal, Sou iniciante em java e preciso da ajuda de vcs! Tenho o seguinte conjunto de dados em um arraylist. Conference,Conference,1.0,1.0,1.0,1.0,1.0,1.0,true,1.0, 01,6.0 Reviewer,Reviewer,1.0,1.0,1.0,1.0,1.0,1.0,false,1.0, 01,6.0 Review,Review,1.0,1.0,1.0,1.0,1.0,1.0,true,1.0, 01,6.0 Person,Person,1.0,1.0,1.0,1.0,1.0,1.0,true,1.0, 01,6.0 Paper,Paper,1.0,1.0,1.0,1.0,1.0,1.0,false,1.0, 01,6.0 ProgramCommittee,Program_committee,0.98,0.75,0.81,1.0,1.0,1.0,true,1.0, 01,5.54 ProgramCommitteeMember,Committee_member,0.81,0.62,0.57,1.0,1.0,1.0,false,1.0, 21,5.0 Co-author,Contribution_co-author,0.63,0.62,0.57,1.0,1.0,1.0,true,1.0, 21,4.82 Preference,Review_preference,0.6,0.42,0.58,1.0,1.0,1.0,true,1.0, 21,4.6 Preciso gerar várias iterações com estes dados. E para cada iteração, preciso eliminar primeira linha da lista. E multiplicar todos os valores das linhas que tiverem true por 1.1 e aquelas linhas que tiverem false por 0.9. As iterações devem ter o mesmo número de linhas da lista. Vai fazendo as Iterações até o conjunto de dados ficar vazio. Teremos, então 9 iterações.

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

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

×
×
  • Criar novo...