erkk84
09-11-2007, 21:59
Ciao a tutti, devo fare un programmino che dato in input una cosa del genere:
4
Brazil
Norway
Morocco
Scotland
6
Brazil#2@1#Scotland
Norway#2@2#Morocco
Scotland#1@1#Norway
Brazil#3@0#Morocco
Morocco#3@0#Scotland
Brazil#1@2#Norway
dopo apposito parsing, mi dà in output una cosa del genere:
1) Brazil 6p, 3g (2-0-1), 3gd (6-3)
2) Norway 5p, 3g (1-2-0), 1gd (5-4)
3) Morocco 4p, 3g (1-1-1), 0gd (5-5)
4) Scotland 1p, 3g (0-1-2), -4gd (2-6)
Quindi ordinata per punteggio, in caso di parità per partite vinte, in caso per differenza goal.
Io ho scritto una cosa così per il momento:
class Squadra implements Comparable<Squadra>{
private String name;
private int score;
public Squadra(String name) {
this.name = name;
score= 0;
}
public String getName() {return name;}
public int getScore() {return score;}
public void setScore(int score) {this.score=score;}
//Si mette il vincolo che ogni squadra abbia nome univoco.
public int hashCode() {return name.hashCode();}
public boolean equals(Object obj) {
if(obj instanceof Squadra)
return ((Squadra)obj).getName().equals(name);
return false;
}
public String toString(){
return name+" "+score+"p";
}
public int compareTo(Squadra s) {
if(name.equals(s.getName()))
return 0;
int result = score-s.getScore();
if(result==0)
result = name.compareTo(s.getName());
return result;
}
}
class Classifica {
public HashMap map;
public ArrayList squadre;
public Classifica() {
map = new HashMap();
squadre = new ArrayList();
}
public boolean add(String name) {
if(map.containsKey(name)) {
return false;
}
Squadra s = new Squadra(name);
map.put(name, s);
squadre.add(s);
return true;
}
public boolean remove(String name) {
if(!map.containsKey(name)) {
return false;
}
Squadra s = (Squadra) map.remove(name);
squadre.remove(s);
return true;
}
public boolean addPoint(String name, int point) {
if(!map.containsKey(name)) {
return false;
}
Squadra s = (Squadra)map.get(name);
s.setScore(s.getScore()+point);
return true;
}
public int getScore(String name){
Squadra s = (Squadra)map.get(name);
return (s.getScore());
}
public static void main(String args[]) {
BufferedReader input;
String in2,in3,in4,in5;
Classifica clas = new Classifica();
try {
System.out.println("Dammi il numero delle squadre: ");
input = new BufferedReader(new InputStreamReader(System.in));
in2 = input.readLine();
System.out.println("Dammi i nomi delle squadre: ");
for (int i=0;i<Integer.valueOf(in2);i++) {
in3 = input.readLine();
clas.add(in3);
}
System.out.println("Dammi il numero degli incontri: ");
in4 = input.readLine();
System.out.println("Dammi gli incontri: ");
for (int i=0;i<Integer.valueOf(in4);i++) {
in5 = input.readLine();
int g1 = in5.indexOf("#")+1;
int g2 = in5.indexOf("@")+1;
String goal1 = in5.substring(g1,g1+1);
String goal2 = in5.substring(g2,g2+1);
if (Integer.valueOf(goal1)>Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),3);
clas.addPoint(in5.substring(g2+2,in5.length()),0);
}
if (Integer.valueOf(goal1)<Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),0);
clas.addPoint(in5.substring(g2+2,in5.length()),3);
}
if (Integer.valueOf(goal1)==Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),0);
clas.addPoint(in5.substring(g2+2,in5.length()),0);
}
}
} catch (Exception ex) { }
}
}
Praticamente mi sono bloccato sull'ordinamento;come faccio a ordinarli nella maniera sopraindicata?se poteste spiegarmi con del codice sarebbe ancora meglio..so che con le hashmap è impossibile fare un ordinamento epr valori, perciò bisognerebeb tirare fuori i valori in un'altra struttura e ordinare da li...ecco, a parole ho capito cosa bisogna fare ma non so da dove partire col codice..
garzie mille a tutti..ciao
4
Brazil
Norway
Morocco
Scotland
6
Brazil#2@1#Scotland
Norway#2@2#Morocco
Scotland#1@1#Norway
Brazil#3@0#Morocco
Morocco#3@0#Scotland
Brazil#1@2#Norway
dopo apposito parsing, mi dà in output una cosa del genere:
1) Brazil 6p, 3g (2-0-1), 3gd (6-3)
2) Norway 5p, 3g (1-2-0), 1gd (5-4)
3) Morocco 4p, 3g (1-1-1), 0gd (5-5)
4) Scotland 1p, 3g (0-1-2), -4gd (2-6)
Quindi ordinata per punteggio, in caso di parità per partite vinte, in caso per differenza goal.
Io ho scritto una cosa così per il momento:
class Squadra implements Comparable<Squadra>{
private String name;
private int score;
public Squadra(String name) {
this.name = name;
score= 0;
}
public String getName() {return name;}
public int getScore() {return score;}
public void setScore(int score) {this.score=score;}
//Si mette il vincolo che ogni squadra abbia nome univoco.
public int hashCode() {return name.hashCode();}
public boolean equals(Object obj) {
if(obj instanceof Squadra)
return ((Squadra)obj).getName().equals(name);
return false;
}
public String toString(){
return name+" "+score+"p";
}
public int compareTo(Squadra s) {
if(name.equals(s.getName()))
return 0;
int result = score-s.getScore();
if(result==0)
result = name.compareTo(s.getName());
return result;
}
}
class Classifica {
public HashMap map;
public ArrayList squadre;
public Classifica() {
map = new HashMap();
squadre = new ArrayList();
}
public boolean add(String name) {
if(map.containsKey(name)) {
return false;
}
Squadra s = new Squadra(name);
map.put(name, s);
squadre.add(s);
return true;
}
public boolean remove(String name) {
if(!map.containsKey(name)) {
return false;
}
Squadra s = (Squadra) map.remove(name);
squadre.remove(s);
return true;
}
public boolean addPoint(String name, int point) {
if(!map.containsKey(name)) {
return false;
}
Squadra s = (Squadra)map.get(name);
s.setScore(s.getScore()+point);
return true;
}
public int getScore(String name){
Squadra s = (Squadra)map.get(name);
return (s.getScore());
}
public static void main(String args[]) {
BufferedReader input;
String in2,in3,in4,in5;
Classifica clas = new Classifica();
try {
System.out.println("Dammi il numero delle squadre: ");
input = new BufferedReader(new InputStreamReader(System.in));
in2 = input.readLine();
System.out.println("Dammi i nomi delle squadre: ");
for (int i=0;i<Integer.valueOf(in2);i++) {
in3 = input.readLine();
clas.add(in3);
}
System.out.println("Dammi il numero degli incontri: ");
in4 = input.readLine();
System.out.println("Dammi gli incontri: ");
for (int i=0;i<Integer.valueOf(in4);i++) {
in5 = input.readLine();
int g1 = in5.indexOf("#")+1;
int g2 = in5.indexOf("@")+1;
String goal1 = in5.substring(g1,g1+1);
String goal2 = in5.substring(g2,g2+1);
if (Integer.valueOf(goal1)>Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),3);
clas.addPoint(in5.substring(g2+2,in5.length()),0);
}
if (Integer.valueOf(goal1)<Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),0);
clas.addPoint(in5.substring(g2+2,in5.length()),3);
}
if (Integer.valueOf(goal1)==Integer.valueOf(goal2)) {
clas.addPoint(in5.substring(0,g1-1),0);
clas.addPoint(in5.substring(g2+2,in5.length()),0);
}
}
} catch (Exception ex) { }
}
}
Praticamente mi sono bloccato sull'ordinamento;come faccio a ordinarli nella maniera sopraindicata?se poteste spiegarmi con del codice sarebbe ancora meglio..so che con le hashmap è impossibile fare un ordinamento epr valori, perciò bisognerebeb tirare fuori i valori in un'altra struttura e ordinare da li...ecco, a parole ho capito cosa bisogna fare ma non so da dove partire col codice..
garzie mille a tutti..ciao