/Users/teofilomatos/Documents/isep/APROG_2010_2011/projectos/PL7_EX_DEM2/src/pl7_ex_dem2/Main.java
 1 package pl7_ex_dem2;
 2 
 3 import java.util.Formatter;
 4 import java.util.Scanner;
 5 
 6 /**
 7  * @author APROG 2009/2010 - 1ND
 8  */
 9 public class Main {
10 
11     private static Scanner ler = new Scanner(System.in);
12     private static Formatter esc = new Formatter(System.out);
13 
14     // ler o número de equipas
15     private static int lerNumeroEquipas() {
16         int numEquipas;
17 
18         do {
19             esc.format("Número de Equipas:");
20             numEquipas = ler.nextInt();
21         } while (numEquipas < 1);
22 
23         return numEquipas;
24     }
25 
26     // ler os nomes dos jogadores das equipas
27     private static void lerEquipas(String[][] mat) {
28         esc.format("Leitura das Equipas%n");
29 
30         for (int col = 0; col < mat[0].length; col++) {
31             esc.format("Equipa %d%n", col + 1);
32             for (int lin = 0; lin < mat.length; lin++) {
33                 esc.format("Jogador %d:", lin + 1);
34                 mat[lin][col] = ler.next();
35             }
36         }
37     }
38 
39     /* verificar o número de colunas que se encontram ordenadas.
40      *
41      * sOrig.compareToIgnoreCase(sDest) - Compara duas strings lexicograficamente (não diferência minusculas de maiusculas)
42      *
43      * Devolve um valor inteiro:
44      *  <0 - se sOrig menor que a string sDest
45      *  0  - se são iguais
46      *  >0 - se sOrig maior que a string sDest
47      */
48     private static int numeroColunasOrdenadas(String[][] mat) {
49         int c = 0, lin;
50 
51         for (int col = 0; col < mat[0].length; col++) {
52             lin = 0;
53             // não chegou ao fim e o nome é menor que o seguinte
54             while (lin < mat.length - 1 && mat[lin][col].compareToIgnoreCase(mat[lin + 1][col]) < 0) {
55                 lin++;
56             }
57             // se o número de linas coincide com a última é porque percorreu
58             // todas as linhas e estão todos ordenados
59             if (lin == mat.length - 1) {
60                 c++;
61             }
62         }
63         return c;
64     }
65 
66 
67     /*
68      *Elabore um programa modular que satisfaça os seguintes requisitos:
69      *
70      *  - Tenha um módulo que receba uma matriz de strings e retorna a
71      *    quantidade de colunas cujas strings estão ordenadas alfabeticamente;
72      *
73      *  - O programa principal deve ler uma matriz de nomes em que cada coluna
74      *    contém os nomes dos jogadores de uma equipa de basquetebol (5 jogadores)
75      *    e mostrar a quantidade de equipas que tem os nomes ordenados
76      *    alfabeticamente. O número de equipas deve ser definido pelo utilizador. 
77      */
78     public static void main(String[] args) {
79         int n = lerNumeroEquipas();
80 
81         String equipas[][] = new String[5][n];
82 
83         lerEquipas(equipas);
84 
85         esc.format("%nNúmero de Equipas Ordenadas: %d%n", numeroColunasOrdenadas(equipas));
86     }
87 }
88 
89