Ordenar por dias da semana

8 respostas
M

Pessoal, to precisando de um metodo para ordenar os dias da semana.

Eu tenho o código abaixo:

String dias[] = diasDaSemana.split(",");

o dias[] ficaria assim por exemplo

dias[0] = “QUI”
dias[1] = “TER”
dias[2] = “SEG”
dias[3] = “QUA”
dias[4] = “SEX”

Como q eu faria pra ordenar certinho?? (SEG,TER,QUA,QUI,SEX)

8 Respostas

V

Para quê você faz o split, em primeiro lugar?

Se isso está vindo de uma configuração externa, force o usuário a colocar os dias já em ordem, afinal, você não terá idéia de como ele digitará o nome dos dias.

Se ele é obrigado a digitar exatamente igual ao que propôs, então, poupe-o do trabalho e já crie o vetor diretamente, ordenado:

String dias[] = {"DOM", "SEG", "TER", "QUA", "QUI", "SEX", "SAB"};
M

Na verdade eu vou montar uma STRING, por isso o split.

a principio vai ficar ordenado, porém ele pode retirar qualquer dia da semana.

Se eu tenho uma String “SEG,TER,QUA,QUI,SEX”, ele pode retirar por exemplo o TER.

Quando ele for incluir novamente, eu to concatenando o dia no final da String (string += “,” + dia). Nesse caso, eu teria que concatenar ja na ordem certo?

V

Quem vai incluir e retirar?
Ainda está cheirando a tentar resolver um problema que você mesmo criou.

M

hehehe.

É pq no modelo do banco, tenho que gravar os dias que o usuario escolher, e la ta como String, ou seja, tem que gravar os dias separados por ‘,’ (SEG,TER,QUA).

na tela eu vou ter um checkbox com os dias da semana. ele pode tanto adicionar quanto retirar qualquer dia.

Na primeira vez que ele selecionar os dias, será gravado em ordem. Só que se ele retirar algum dia e depois incluir novamente, ja perco a ordem, pq to concatenando os dias
no final da String

T

Peri… para tudo!

Reveja a lógica da sua aplicação!
Vc está usando GUI, então qual o problema com Strings?

Vc só persiste quando o usuário der um OK, por exemplo, e ao invés de fazer esse skema incrementar, substitua a entrada!

V

E não é mais fácil concatenar na ordem direto? Ou alterar o banco para savar um boolean para cada?

Eu alteraria o banco, pois certamente você vai precisar fazer consultas envolvendo esses dias… e vai ser bem difícil consultar todos os que tem marcado “segunda e quinta ou quarta”, se deixar o dado desse jeito lá.

É por isso que dizemos que os dados devem estar na primeira forma normal, e serem indivisíveis. Sem falar que string deve ser usada para representar texto, não outras coisas.

M

Pois é, mas eu nao tenho acesso ao banco. Vou fazer da forma que vc disse, vou concatenar na ordem.

Vou pensar um jeito de fazer aqui, mas de qualquer foma, muito obrigado ViniGodoy e tkx .

T

Oi... bom... acho q fiz o q vc queria!

Mas não eh a melhor forma de se trabalhar! Use a aplicação a seu favor e não contra vc! Segue
public static void main(String[] args) {
        System.out.print(new Main().reordenar("SEX,DOM,TER,SEG"));
    }

    private String reordenar(String dias){
        String retorno = "";
        if(dias.contains("SEG"))
            retorno += "SEG,";
        if(dias.contains("TER"))
            retorno += "TER,";
        if(dias.contains("QUA"))
            retorno += "QUA,";
        if(dias.contains("QUI"))
            retorno += "QUI,";
        if(dias.contains("SEX"))
            retorno += "SEX,";
        if(dias.contains("SAB"))
            retorno += "SAB,";
        if(dias.contains("DOM"))
            retorno += "DOM,";
        retorno = retorno.substring(0, retorno.length()-1);
        return retorno;
    }
Criado 15 de abril de 2010
Ultima resposta 16 de abr. de 2010
Respostas 8
Participantes 3