Porcentagem + votos

14 respostas
I

Boa noite!

Primeiramente gostaria de antemão, agradecer a qualquer um que se dispor a me ajudar!

Estou desenvolvendo um código em JAVA, que deve ter o seguinte critério.

A pessoa terá um botão de voto EX: SIM, NÂO e NÂO SEI , ao clicar em SIM é computado 1 voto a mais para o SIM. O botão SIM ficará inativo para esta pessoa, para não haver múltiplos votos no SIM, somente o botão NÃO e NÂO SEI ficaram disponíveis caso ela queira mudar de ideia.

Quando ela vota, irá clicar em um novo botão RESULTADO, clicando nele deverá surgi algo deste forma.

SIM : 68% dos votos
NÂO: 22% dos votos
NÂO SEI: 10% dos votos

Obs: esse codigo do JAVA e para um aplicativo que estou desenvolvendo no Android.

Abraços.

14 Respostas

J

Olá amigo vou te dá as ideias:
como é no android vc terá três buttons pelo que vejo, então ao clicar sobre o SIM por exemplo, vc usar o método do setEnable(false) e passa como parâmetro false, assim ele será desativado para que não seja clicado novamente. caso ela mude de ideia, ao clicar no BOTÃO NAO, NAO SEI vc mudar o botão sim para true novamente, usando o método que eu te falei ex:

btnSim.setEnable(true);

Devo supor que vc já saiba fazendo os eventos dos botões certo?

V

E qual exatamente é a dúvida? Você não sabe calcular os percentuais? Não sabe fazer os botões?

I

Boa noite!

Pessoal desculpe a demora em responder estava sem tempo.

Vamos lá!

Segue o codigo atualizado:

public class MainActivity extends ActionBarActivity {

int afavor = 0;

int contra = 0;

int naosei = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void contra(View view) {
    afavor = afavor + 1;
    display (afavor);
}

public void afavor(View view) {
    contra = contra + 1;
    display1(contra);
}

public void naosei(View view) {
    naosei = naosei + 1;
    display2(naosei);
}

private void display(int number) {
    TextView contraTextView = (TextView) findViewById(
            R.id.afavor);
    contraTextView.setText("" + number);
}

private void display1(int number) {
    TextView afavorTextView = (TextView) findViewById(
            R.id.contra);
    afavorTextView.setText("" + number);
}
private void display2(int number) {

    TextView naoseiTextView = (TextView) findViewById(
            R.id.naosei);
    naoseiTextView.setText("" + number);
}

}

O que ainda falta é: quando alguém clicar em A FAVOR, este botão fica desabilitado, somente os botões CONTRA E NÃO SEI ficaram habilitados, mas caso a pessoa mude de ideia e resolva clicar em CONTRA, este botão fica desabilitado, e o botão A FAVOR ficará disponível novamente. o mesmo para o botão NÂO SEI.

Não quero que fique acumulando votos, ele será online por isso cada pessoa deverá apenas computar 1 voto. Ainda estou pensando no meio de validação para cada voto, através de algum método de login, tempo necessário para decidir mudar de votos etc…

Estou imaginando algo assim: ao clicar A FAVOR, imputa 1 no campo A FAVOR, ao mudar de ideia e clicar NÃO SEI, o retira 1 do campo A FAVOR (que tinha sido escolhido previamente) e imputa no campo NÂO SEI.

Tambem, estou com dificuldades, para calcular o total de votos e dar a % na frente de cada 1 dos 3 botões existentes.

OBS: apesar de eu estar querendo que ele seja online com BD e tudo mais, agradeço se me ajudarem a fizer ele apenas para eu ir testando offline.

Obrigado!

I

Boa noite!

VIni, sim os botões estão criados e funcionando perfeitamente… Como disse no tópico atualizado, sim, estou com dificuldades na %, não por sabem calcular, mas por não saber como aplicar no JS, devido a falta de conhecimento da minha parte com esta linguajem,

I

Opa Jean, sim esta criado os botões, quando faço debug funciona perfeitamente (não como esperado) mais funciona…

J

Conseguiu implementar então o que eu te falei antes?

btnAfavor.setEnable(false);
J

Bom, para caso offline ficaria desta forma no seu caso:

public void aFavor(View view) {
    afavor = afavor + 1;
    display (afavor); 
    //com este comando o botão ficará desativado
    btnAFavor.setEnable(false);
}
public void contra(View view) {
    contra = contra + 1;
    display (afavor);
    if(!btnAfavor.isEnable()){
       //aqui ativamos o botão a favor de novo caso ele esteja já selecionado;
        btnAfavor.setEnable(true);
      //aqui tiramos o voto do afavor
      afavor = afavor - 1;
   }else if(!btnNaoSei.isEnable()){
     //verifica se o botão não sei foi selecionado
    btnNaoSei.setEnable(true);
      //aqui tiramos o voto do afavor
      naoSei = naoSei - 1;
        }
   btnContra.setEnable(false);
   }

entendeu a ideia?
observação, esqueci de aplicar tbm no método aFavor, mas dá para entender

I

Opa,

Jean, não tenho como realizar o teste agora no Studio, mas acredito que ainda ficou incompleto. Dei uma lida no seu scrip e acho que não realizaria o que eu tenho em mente.

Estou anexado um diagrama feito no word, onde desenhei minha ideia.VOTO.docx (5,7 KB)

Na 2 ° coluna esta a ação do usuário e na 3° o que deve esta armazenado no JS.

Esse processo pode mudar inumeras vezes, e sem seguir um padrão, o importante é que sempre que, o usuário mudar de voto, o botão do novo voto desabilita, o botão do velho voto volta a ser habilitado, e é retirado o voto do antigo voto e passado para o novo voto.

Agradeço se poder ver e corrigir se possivel =]

Obrigado novamente!

J

Bom irene, eu olhei o diagrama, mas nao to entendendo oq vc tem em mente, o que eu te mostrei no código faz exatamente oq o diagrama diz:
ex esta parte:

public void contra(View view) {
    contra = contra + 1;
    display (afavor);
    if(!btnAfavor.isEnable()){
       //aqui ativamos o botão a favor de novo caso ele esteja já selecionado;
        btnAfavor.setEnable(true);
      //aqui tiramos o voto do afavor
      afavor = afavor - 1;
   }else if(!btnNaoSei.isEnable()){
     //verifica se o botão não sei foi selecionado
    btnNaoSei.setEnable(true);
      //aqui tiramos o voto do afavor
      naoSei = naoSei - 1;
        }
   btnContra.setEnable(false);
   }

o que faz está parte, vamos lá, bom o usuario clicou em aFavor, mas ele mudou de ideia, e clicou em contra logo em seguida, então oq o codigo fez, HABILITOU o botão a favor novamente, e retirou o voto do afavor e passou para o contra! ou seja o código está de acordo com o seu diagrama. Acontece a mesma coisa caso o usuario clicou em não sei e mudou para contra, e isso pode acontecer infinita vezes. agora vou fazer todo o código de acordo com o seu diagrama para retirar qualquer duvida ok?

int aFavor = 0;
int contra = 0;
int naoSei = 0;

public void clicouAfavor(){
 this.aFavor++; // aqui ele incrementa o que ele já tem + 1
 if(!btnContra.isEnable()){
     // se o botão contra foi clicado, então ele ta desabilitado, então vamos habilitar o cara
     btnContra.setEnable(true);
    //vamos retirar o voto do contra, já que ele foi clicado!
     this.contra--; // aqui retiramos o voto do contra
  }else if(!btnNaoSei.isEnable()){
      // se o botão não sei foi clicado, então ele ta desabilitado, então vamos habilitar o cara
       btnNaoSei.setEnable(true);
    //vamos retirar o voto do Nao Sei, já que ele foi clicado!
     this.naoSei--; // aqui retiramos o voto do contra
  } 
// agora desativamos o botão a favor já que ele foi clicado não é mesmo?
btnAfavor.setEnable(false);
}
public void clicouContra(){
  this.contra++;
  if(!btnAfavor.isEnable()){
    btnAfavor.setEnable(true);
   this.aFavor--;
   }else if(!btnNaoSei.isEnable()){
    btnNaoSei.setEnable(true);
    this.naoSei--;
              }
  btnContra.setEnable(false);
}
public void clicouNaoSei(){
  this.naoSei++;
  if(!btnAfavor.isEnable()){
    btnAfavor.setEnable(true);
   this.aFavor--;
   }else if(!btnContra.isEnable()){
    btnContra.setEnable(true);
    this.contra--;
}
  btnNaoSei.setEnable(false);
}

Pronto está o codigo exatamente como está o seu diagrama, exatamente igual!

I

Boa tarde!

Jean, desde ontem estou tentando implementar este seu codigo, no studio para que rode perfeitamente.

Mas ele não funciona! Vou colocar abaixo a maneira que tentei e ve se consegue ver algo que deixei passar.

public void contra(View view) {
    this.contra++;
    if (!bafavor).isEnabled()){
       bafavor.setEnable(true);
        this.afavor--;
    }
    else if(!bnaosei).isEnabled()){
        bnaosei.setEnabled(true);
        this.naosei--;
    }
    bcontra.setEnabled(false);
}

Para este caso deu muitos erros! E não funcionou…

Conseguir fazer com que ao clicar o botão do voto fique desabilitado desta maneira.

public void contra(View view) {
    contra = contra + 1;
    display(contra);
    Button button = (Button)findViewById(R.id.bcontra);
    button.setEnabled(false);
}

public void afavor(View view) {
    afavor = afavor + 1;
    display1(afavor);
    Button button = (Button)findViewById(R.id.bafavor);
    button.setEnabled(false);
}

public void naosei(View view) {
    naosei = naosei + 1;
    display2(naosei);
    Button button = (Button)findViewById(R.id.bnaosei);
    button.setEnabled(false);
}

Mas não conseguir fazer que ao mudar de voto, o botão do voto antigo seja habilitado novamente, que o voto antigo seja anulado e repassado para o novo voto.

I

Boa boite!

Jean,

Consegui segui sua linha raciocínio e cheguei a este codigo:

public void contra(View view) {
    contra = contra + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(false);
    button2.setEnabled(true);
    button3.setEnabled(true);

    if (button2.isEnabled()){
        button2.setEnabled(true);
       afavor = afavor - 1;
    } else if (button3.isEnabled()){
        button3.setEnabled(true);
        naosei = naosei - 1;
    }
    display(contra);

}

    public void afavor(View view) {
    afavor = afavor + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(true);
    button2.setEnabled(false);
    button3.setEnabled(true);

    if (button1.isEnabled()) {
       button1.setEnabled(true);
       contra = contra - 1;
   } else if (button3.isEnabled()){
       button3.setEnabled(true);
       naosei = naosei - 1;
   }
    display1(afavor);

}

public void naosei(View view) {
    naosei = naosei + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(true);
    button2.setEnabled(true);
    button3.setEnabled(false);

    if (button1.isEnabled()){
        button1.setEnabled(true);
        contra = contra - 1;
    } else if (button2.isEnabled()){
        button2.setEnabled(true);
        afavor = afavor - 1;
    }
    display2(naosei);

}

As habilitações e desabilitações dos botões estão perfeitas! Quando um é desabilitado, basta clicar em outro para que, o botão que estava desabilitado volte ao normal, e o novo botão selecionado ser desabilitado.

Mesmo usando seu método:

public void contra(View view) {
    this.contra++;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(false);
    button2.setEnabled(true);
    button3.setEnabled(true);

    if (button2.isEnabled()){
        button2.setEnabled(true);
       this.afavor--;
    } else if (button3.isEnabled()){
        button3.setEnabled(true);
        this.naosei--;
    }
    display(contra);

}

Não é feito a subtração de modo correto dentro do aplicativo! Ao invés de sempre ficar 2 funções com 0 votos e 1 função com 1 voto, tem momentos que até negativo a quantidade de voto fica.

Alguém consegue me ajudar?

J

Bom como nao sei como está sua Activity, então nao tenho como ajudar
nesta parte, só percebi o erro de vc smp que clicar no botão ele cria um
objeto e pega a referencia novamente, nao recomendo isto, o certo e vc
pega a referencia uma unica vez no OnCreate da sua activity. e provavelmente esté era o erro do codigo q passei para vc não funcionar no inicio!

Percebo que vc continua fazendo a mesma coisa criando um objeto e pegando a referencia do layout toda a vez que ele é clicado

I

Jean boa noite!

Segue o código por completo:

public class MainActivity extends ActionBarActivity {
int afavor, contra, naosei = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

public void resultado(View view) {
    String resultado = (contra)+(naosei)+(afavor)+ " Votos";
    totalvotos(resultado);

}

private void totalvotos(String message) {
    TextView parcialTextView = (TextView) findViewById(R.id.parcial);
    parcialTextView.setText(message);
}


public void contra(View view) {
    contra = contra + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(false);
    button2.setEnabled(true);
    button3.setEnabled(true);

    if (button2.isEnabled()){
        button2.setEnabled(true);
       afavor = afavor - 1;
    } else if (button3.isEnabled()){
        button3.setEnabled(true);
        naosei = naosei - 1;
    }
    display(contra);

}


public void afavor(View view) {
    afavor = afavor + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(true);
    button2.setEnabled(false);
    button3.setEnabled(true);

    if (button1.isEnabled()) {
       button1.setEnabled(true);
       contra = contra - 1;
   } else if (button3.isEnabled()){
       button3.setEnabled(true);
       naosei = naosei - 1;
   }
    display1(afavor);

}

public void naosei(View view) {
    naosei = naosei + 1;
    Button button1 = (Button)findViewById(R.id.bcontra);
    Button button2 = (Button)findViewById(R.id.bafavor);
    Button button3 = (Button)findViewById(R.id.bnaosei);

    button1.setEnabled(true);
    button2.setEnabled(true);
    button3.setEnabled(false);

    if (button1.isEnabled()){
        button1.setEnabled(true);
        contra = contra - 1;
    } else if (button2.isEnabled()){
        button2.setEnabled(true);
        afavor = afavor - 1;
    }
    display2(naosei);

}


private void display(int number) {
    TextView contraTextView = (TextView) findViewById(
            R.id.contra);
    contraTextView.setText("" + number);
}

private void display1(int number) {
    TextView afavorTextView = (TextView) findViewById(
            R.id.afavor);
    afavorTextView.setText("" + number);
}
private void display2(int number) {
    TextView naoseiTextView = (TextView) findViewById(
            R.id.naosei);
    naoseiTextView.setText("" + number);
}

}

Com o código acima é possível identificar porque, a quantidade de votos não esta se limitando apenas 1 voto em uma das 3 opções?

Como expliquei, se “afavor” tem 1 voto, “contra” e “nao sei” tem que ter 0 votos, essa ultimas duas opções só terão 1 voto se a opção de voto for mudada, ai a opção anterior zera, e a nova ganha 1 voto.

Agradeço mais 1 vez!

J

Irene vou te entregar os codigos pronto e na mão ninguem do GUJ faz kkk, eu testei e aprovei, funcionou tudo perfeitamente desde do botões aos votos, depois vc implementar da sua maneira aqui vai:

public class MainActivity extends AppCompatActivity {
    private int aFavor = 0;
    private int contra = 0;
    private int naoSei = 0;
    // criou os objetos button somente uma vez
    private Button btnAfavor;
    private Button btnContra;
    private Button btnNaoSei;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // aqui eu pego as referencias do botões
        btnAfavor = (Button) findViewById(R.id.btnAfavor);
        btnContra = (Button) findViewById(R.id.btnContra);
        btnNaoSei = (Button) findViewById(R.id.btnNaoSei);
        // aqui vou adicionar os eventos dos botões

        btnAfavor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                aFavor++;
                if(!btnContra.isEnabled()){
                    btnContra.setEnabled(true);
                    contra--;
                }else if(!btnNaoSei.isEnabled()){
                    btnNaoSei.setEnabled(true);
                    naoSei--;
                }
                btnAfavor.setEnabled(false);
                
            }
        });
        btnContra.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                contra++;
                if(!btnAfavor.isEnabled()){
                    btnAfavor.setEnabled(true);
                    aFavor--;
                }else if(!btnNaoSei.isEnabled()){
                    btnNaoSei.setEnabled(true);
                    naoSei--;
                }
                btnContra.setEnabled(false);

            }

        });
        btnNaoSei.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                naoSei++;
                if(!btnAfavor.isEnabled()){
                    btnAfavor.setEnabled(true);
                    aFavor--;
                }else if(!btnContra.isEnabled()){
                    btnContra.setEnabled(true);
                    contra--;
                }
                btnNaoSei.setEnabled(false);

            }
        });
    }
}

Irene, bom espero ter ajudado, ta ai eu mesmo testei no Android Studio!
Outra observação importante irene utilize Log para saber a situação das variaveis, ele exibi no console do Android Studio:smile:
ex:

Log.i("Situação", "Afavor: " + aFavor + " Contra: " + contra + " naoSei: " + naoSei);
Criado 15 de dezembro de 2015
Ultima resposta 20 de dez. de 2015
Respostas 14
Participantes 3