Jump to content

Recommended Posts

Posted

Eu estou um pouco perdido...

Eu criei basicamente um programa " questionário " em que o utilizador vai escrever nas TextBoxes o nome etc... Depois tem ComboBoxes em que o utilizador vai selecionar por exemplo o continente onde vai passar as férias.

Estes " continentes " estão dentro de um ComboBox no programa principal.

Agora criei uma classe " Sondagem " e procuro um método que diga ao utilizador qual é o Continente mais "procurado" pelos utilizadores.

Eu na net encontrei este método mas nem sei se ele funciona para o ComboBox...

	class Sondagem
{
	private List<string> Continente;


	public Sondagem(List<string> Continente)
	{
		this.Continente = Continente;
	}

Alguém sabe qual é o método que devo usar a seguir para que ele diga por fim o continente mais usado pelo utilizador ? Não quero nada de base de dados. Procuro algo simples por sou iniciado. :|

Cumprimentos.

Posted

Olá.

Claramente deve haver algum sítio onde tens as escolhas do utilizador gravadas. Essa sondagem depois terá um método que olha para esses dados e verifica neles quais os continentes mais seleccionados pelo utilizador. Mas esse método terás tu que fazer, e basicamente o que ele faz é uma contagem de quantas vezes cada continente foi escolhido. Dado que isto é algo simples, eu criava uma classe chamada "Utilizador". Cada utilizador faz apenas uma escolha (certo?), por isso nessa classe podes meter como propriedade a escolha que o utilizador fez.

Depois em algum sítio (poderá ser uma lista em memória de utilizadores, para não complicar), vais ter todas as instâncias da classe "Utilizador", que tem lá a escolha de cada um. É para essas instâncias que vais olhar ao implementar o método na classe Sondagem.

Cumprimentos

Posted

Totalmente desnecessário criar uma classe só para perceber qual é o continente mais utilizado..

Crias uma lista de strings e depois verificas via Linq qual é o continente mais utilizado.

List<string> continentes = new List<string>() { "Asia", "Europa", "America", "Europa" };
String mostUsed =  (from cont in continentes
							 group cont by cont into g
							 orderby g.Count() descending
							 select g.Key).FirstOrDefault(); // Não testado mas deve funcionar

Depois chamas as funções da variável

mostUsed.Key, mostUsed.Count;
Posted
List continentes = new List() { "Asia", "Europa", "America", "Europa" };
string maisUsada = continentes.ToLookup(x => x) //Agrupa os continentes
                    .OrderByDescending(x=>x.Count()) //Ordena por ordem decrescente
                    .FirstOrDefault() //primeiro registo que e' o que tem mais
                    .Key;

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

Olá!

Sendo que apenas queres os nomes dos continentes, então sim, a solução do bioshock é óptima. No entanto, se quiseres evoluir o código com mais algumas informações, aconselho-te aí sim a utilizar a classe. É algo que convém aprender de qualquer forma e nem sequer é complexo, por isso terás que te habituar. Pelo menos é o que eu faria, uma vez que *normalmente* a melhor prática é utilizar classes para representar os conceitos.

Abraço

Posted

Eu também me lembrei de fazer uma tabela, seria mais fácil mas o exercicio pede mesmo para criar uma class. Não posso usar uma tabela a não ser que seja um complemento do exercicio que contenha a Class.

A minha class Sondagem é a seguinte:

	class Sondage
{
	private List<string> Continent;



	public Sondage(List<string> cbContinent)
	{
		Continent = cbContinent;
	}
}

cbContinent é o nome da combo box onde estão alojados os nomes dos continentes.

O que pretendo agora é fazer com que a Classe sondagem faça a tal contagem e que guarde essa informação. Esse voto tem que ser usado para depois o programa precisar quantos votos foram para cada um dos continentes. Ainda agora comecei a aprender sobre classes por isso pretendo algo simples e que me permita perceber o que escrevo.

Posted

Então devias ler mais um bocadinho sobre classes e sobre o encapsulamento.

1.º conselho, não mistures objectos gráficos (combobox) com as tuas classes.

2.º Uma combobox não te guarda sozinha o número de vezes que uma entrada é seleccionada.

Usa antes uma estrutura que te permita guardar o número de entradas de cada continente, ou simplesmente todoas as entradas feitas. Por exemplo, estás a tentar inicializar a tua sondagem (em inglês "survey") com todos os valores da combobox (e de forma errada). Porque não a inicializas vazia, e adicionas cada entrada através de um método?

A tua classe pode adicionar cada entrada nova à lista, ou ter uma estrutura mais complexa que te verifica se essa entrada já existe, e somar 1 à frequência.

Para obteres todas as entradas na combobox:

cbContinent.Items

para saberes que entrada está selecionada:

cbContinent.SelectedItem

para mais informação sobre como lidar com comboboxes:

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox(v=vs.110).aspx

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.