Advertisement
spiny94

Untitled

Sep 8th, 2015
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.72 KB | None | 0 0
  1. package mondo;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.util.ArrayList;
  6. import java.util.Collections;
  7. import java.util.Comparator;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.StringTokenizer;
  11.  
  12. public class Mondo {
  13.  
  14.     public static void main(String[] args) {
  15.  
  16.     }
  17.  
  18.     private HashMap<String, Stato> stati = new HashMap<String, Stato>();
  19.  
  20.     public boolean aggiungiStato(String stato, String capitale, long popolazione, double dimensione) {
  21.  
  22.         if (stati.containsKey(stato.toUpperCase()))
  23.             return false;
  24.         Stato s = new Stato(stato, capitale, popolazione, dimensione);
  25.         stati.put(stato.toUpperCase(), s);
  26.  
  27.         return true;
  28.     }
  29.  
  30.     public String getCapitale(String stato) {
  31.         if (!stati.containsKey(stato.toUpperCase())) return null;
  32.          return stati.get(stato.toUpperCase()).getCapitale();
  33.     }
  34.  
  35.     public long getPopolazione(String stato) {
  36.         if (!stati.containsKey(stato.toUpperCase()))
  37.             return 0;
  38.         return stati.get(stato.toUpperCase()).getPopolazione();
  39.     }
  40.  
  41.     public double getDimensione(String stato) {
  42.         if (!stati.containsKey(stato.toUpperCase()))
  43.             return 0.0;
  44.         return stati.get(stato.toUpperCase()).getDimensione();
  45.     }
  46.  
  47.     // return true se dati caricati correttamente , false in caso di errori
  48.     public boolean caricaDati(String stati, String confini) {
  49.         try {
  50.             BufferedReader instati = new BufferedReader(new FileReader(stati));
  51.             String s = "";
  52.             while ((s= instati.readLine()) != null) {
  53.  
  54.                 StringTokenizer st = new StringTokenizer(s, ":");
  55.                 String stato = st.nextToken().trim();
  56.                 String resto = st.nextToken();
  57.                 int i=0;
  58.                 while ( i < resto.length() ) {
  59.                     char c = resto.charAt(i);
  60.                     if (c >= '0' && c <= '9')
  61.                         break;
  62.                     i++;   
  63.                 }
  64.                 if (i==resto.length()) {
  65.                     System.out.println("Linea irregolare");
  66.                     return false;
  67.                 }
  68.                 String capitale = resto.substring(0, i).trim();
  69.                 String cifre = resto.substring(i);
  70.                 StringTokenizer number = new StringTokenizer(cifre);
  71.                 String dim = number.nextToken().replace(",", "").trim();
  72.                 String pop = number.nextToken().replace(",", "").trim();
  73.                
  74.                 long popolazione = Long.parseLong(pop);
  75.                 double dimensione = Double.parseDouble(dim);
  76.                 if (!aggiungiStato(stato, capitale, popolazione,dimensione))
  77.                     return false;
  78.             }
  79.             BufferedReader inconfini = new BufferedReader(new FileReader(confini));
  80.             String s2 = "";
  81.             while ((s2= inconfini.readLine()) != null) {
  82.                 StringTokenizer token2 = new StringTokenizer(s2, ":");
  83.                 String stato1 = token2.nextToken().trim();
  84.                 String stato2 = token2.nextToken().trim();
  85.                 setConfine(stato1, stato2);
  86.             }
  87.  
  88.         } catch (Exception e) {
  89.             System.out.println("Errore");
  90.             return false;
  91.         }
  92.         return true;
  93.     }
  94.  
  95.     public void setConfine(String stato1, String stato2) {
  96.         Stato s1 = stati.get(stato1.toUpperCase().trim());
  97.         Stato s2 = stati.get(stato2.toUpperCase().trim());
  98.         if (s1 != null && s2 != null) {
  99.             s1.setConfinante(s2);
  100.             s2.setConfinante(s1);
  101.         }
  102.     }
  103.  
  104.     public int numeroConfinanti(String stato) {
  105.         Stato s = stati.get(stato.toUpperCase());
  106.         return (s != null) ? s.numeroConfinanti() : 0;
  107.     }
  108.  
  109.     public boolean confinano(String stato1, String stato2) {
  110.  
  111.         Stato s1 = stati.get(stato1.toUpperCase());
  112.         Stato s2 = stati.get(stato2.toUpperCase());
  113.  
  114.         return (s1 != null && s2 != null)? s1.confina(stato2) : false;
  115.     }
  116.  
  117.     public String getConfinanti(String stato) {
  118.         Stato s = stati.get(stato.toUpperCase());
  119.         return (s != null) ? s.getConfini() : "";
  120.     }
  121.  
  122.     @SuppressWarnings("unchecked")
  123.     public String ordinaPerPopolazione() {
  124.         List<Stato> ordina = new ArrayList<Stato>(stati.values());
  125.         Collections.sort(ordina);
  126.         String s = "";
  127.         for (int i = 0; i < ordina.size(); i++) {
  128.             Stato temp = ordina.get(i);
  129.             s = s + (i + 1) + ". " + temp.getNome() + " "
  130.                     + Long.toString(temp.getPopolazione()) + "\n";
  131.         }
  132.  
  133.         return s;
  134.     }
  135.  
  136.     public String ordinaPerDimensione() {
  137.         List<Stato> ordina = new ArrayList<Stato>(stati.values());
  138.         Collections.sort(ordina,
  139.           new Comparator<Stato>() {
  140.             public int compare(Stato o1, Stato o2) {
  141.                 return (int) (o2.getDimensione() - o1.getDimensione());
  142.             }
  143.         });
  144.         String s = "";
  145.         for (int i = 0; i < ordina.size(); i++) {
  146.             Stato temp = ordina.get(i);
  147.             s = s + (i + 1) + ". " + temp.getNome() + " "
  148.                     + Double.toString(temp.getDimensione()) + "\n";
  149.         }
  150.         return s;
  151.     }
  152. }
  153. package mondo;
  154.  
  155. import java.util.ArrayList;
  156.  
  157. public class Stato implements Comparable {
  158.  
  159.     private String nome;
  160.     private String capitale;
  161.     private long popolazione;
  162.     private double dimensione;
  163.     private ArrayList<Stato> confini = new ArrayList<Stato>();
  164.    
  165.     public Stato(String stato, String capitale, long popolazione, double dimensione) {
  166.         this.nome = stato;
  167.         this.capitale = capitale;
  168.         this.popolazione = popolazione;
  169.         this.dimensione = dimensione;
  170.     }
  171.  
  172.     public String getCapitale() {
  173.         return capitale;
  174.     }
  175.  
  176.     public long getPopolazione() {
  177.         return popolazione;
  178.     }
  179.  
  180.     public double getDimensione() {
  181.         return dimensione;
  182.     }
  183.  
  184.     public int compareTo(Object arg0) {
  185.         Stato s = (Stato) arg0;
  186.         return (int) (s.getPopolazione() - this.getPopolazione());
  187.     }
  188.  
  189.     public String getNome() {
  190.         return nome;
  191.     }
  192.  
  193.     public void setConfinante(Stato s) {
  194.         confini.add(s);
  195.     }
  196.  
  197.     public int numeroConfinanti() {
  198.         return confini.size();
  199.     }
  200.  
  201.     public boolean confina(String stato) {
  202.         for (int i = 0; i < confini.size(); i++) {
  203.             if (confini.get(i).getNome().trim().equalsIgnoreCase(stato.trim()))
  204.                 return true;
  205.             }
  206.         return false;
  207.     }
  208.  
  209.     public String getConfini() {
  210.         String s = "";
  211.         for (int i = 0; i < confini.size(); i++) {
  212.             s += confini.get(i).getNome();
  213.             if (i!=confini.size()-1)
  214.                 s += ", ";
  215.         }
  216.         return s;
  217.     }
  218.  
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement