Galera to estudando java nessas férias…
Eu peguei alguns exercicios pra fazer e surgiu uma duvida sobre aleatoriedade…Eis o problema:
Copa do Mundo Alienígena:
Implemente uma classe que modele um alienígena, com os seguintes atributos:
-Nome (String)
-Número de olhos (inteiro entre 0 e 10)
-Cor (Color Color.black, Color.green, Color.blue, etc.)
-Altura (double entre vinte centímetros ou dois metros e meio)
-Número de pernas (inteiro entre 1 e 4)
-Posição (String “zagueiro”, “meio campo”, “atacante”)
[color=red] Implemente um construtor na classe acima para que sorteie as características do alienígena. A posição do alieníge[/color]
Como poderia implementar o construtor???
Note que Math.random() retorna sempre um número entre 0.0 (inclusive) e 1.0 (exclusive). Você precisa então fazer algumas contas para ajustar o valor para o que você precisa.
Por exemplo, para pegar um número entre 1 e 4, pegue o valor retornado por Math.random(), multiplique por (4 - 1 + 1), e some 1.
Para pegar um número entre 0 e 10, pegue o valor retornado por Math.random(), multiplique por (10 - 0 + 1), e some 0.
Para pegar um número entre 0.20 e 2.5, pegue o valor retornado por Math.random(), multiplique por (2.5 - 0.20), e some 0.20.
Você entendeu a conta que tem de fazer? Acho que você é esperto e entendeu direitinho a conta a ser feita.
import java.awt.Color;
enum Posicao {
SAGUEIRO,MEIOCAMPO,ATACANTE;
}
public class Alienigena {
private String nome;
private Integer olhos;
private Color cor;
private Double altura;
private Integer pernas;
private Posicao posicao;
public Alienigena() {
int olhos = (int) Math.random() * 10;
this.setOlhos(olhos);
}
public Alienigena(Double altura, Color cor, String nome, Integer olhos,
Integer pernas, Posicao posicao) {
this.setNome(nome);
this.setOlhos(olhos);
this.setCor(cor);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Integer getOlhos() {
return olhos;
}
public void setOlhos(Integer olhos) {
if(!(olhos>=0 && olhos<=10)){
olhos = 0;
}
this.olhos = olhos;
}
public Color getCor() {
return cor;
}
public void setCor(Color cor) {
if(cor == null){
cor = Color.black;
}
this.cor = cor;
}
public Double getAltura() {
return altura;
}
public void setAltura(Double altura) {
this.altura = altura;
}
public Integer getPernas() {
return pernas;
}
public void setPernas(Integer pernas) {
this.pernas = pernas;
}
public Posicao getPosicao() {
return posicao;
}
public void setPosicao(Posicao posicao) {
this.posicao = posicao;
}
}
thingol o problema nao eh usar o random em si…o problema eh como fazer Strings serem aleatorias???..pois ateh onde eu sei MATH.RANDOM trabalha com numeros e nao com strings
Sim senhor, mas você pode pôr as strings dentro de um array.
Digamos que você tenha 3 strings (“zagueiro”, “meio campo”, “atacante”).
Você cria um array de 3 strings, e gera um número aleatório que vai de 0 até 2 (ou seja, você pega Math.random e multiplica o resultado por 3; não precisa somar nada. Aí você converte o valor para um inteiro).
Aí você pega a string do array que corresponde a esse número de 0 até 2. OK?
A mesma coisa vale para a enum; você pode criar um array de N enums (Color.black etc.).
Ah eh realmente…nem tinha me lembrado de arrays :x Vou tentar fazer…
E mathiasnw vlw pelo codigo, vou dar uma olhada aki…
Vlw pessoal, depois eu volto pra falar se consegui ou se tive duvidas…
Ontem estava atrasado e acabei nao fazendo a parte principal do codigo segue agora resumindo.
import java.awt.Color;
enum Posicao {
SAGUEIRO(1),MEIOCAMPO(2),ATACANTE(3);
private Integer n;
private Posicao(int n) {
n = new Integer(n);
}
public static Posicao getSorted() {
Posicao[] array = Posicao.values();
int nSorted = (int) Math.random() * (array.length-1);
return array[nSorted];
}
}
public class Alienigena {
private String nome;
private Integer olhos;
private Color cor;
private Double altura;
private Integer pernas;
private Posicao posicao;
public Alienigena() {
int olhos = (int) Math.random() * 10;
this.setOlhos(olhos);
this.setPosicao(Posicao.getSorted());
}
public Alienigena(Double altura, Color cor, String nome, Integer olhos,
Integer pernas, Posicao posicao) {
this.setOlhos(olhos);
this.setCor(cor);
}
public void setPosicao(Posicao posicao) {
this.posicao = posicao;
}
public void setOlhos(Integer olhos) {
if(!(olhos>=0 && olhos<=10)){
olhos = 0;
}
this.olhos = olhos;
}
public void setCor(Color cor) {
if(cor == null){
cor = Color.black;
}
this.cor = cor;
}
}
Cara fiz dessa maneira não é a mais correta, mas você pode melhorar ela ^^
flws :twisted:
import java.util.List;
import java.util.Random;
public class alienigina {
public static String[] nome = { “Hataki”, “Izume”, “Nagto” };
public static int numeroOlhos = 4;
public static String[] cor = { “preto”, “verde”, “azul” };
public double alturaMax = 2.40;
public double alturaMin = 0.20;
public void randomicoNome(String[] novo) {
int rand = 0;
String alienigina = null;
for (int i = 0; i < novo.length + 1; i++) {
rand = (int) (Math.random() * i);
alienigina = novo[rand];
}
System.out.println(alienigina);
}
public void randomicoNumero(double maximo , double minimo) {
double loteria = 0.0;
for (double i = minimo; i < maximo; i++) {
loteria = Math.random() * i;
System.out.println(Math.round(loteria));
}
}
public void randomicoOlhos(int novo) {
double loteria = 0.0;
for (int i = 1; i < novo; i++) {
loteria = Math.random() * i;
}
System.out.println(Math.round(loteria));
}
public static void main(String[] args) {
alienigina a = new alienigina();
a.randomicoNome(nome);
a.randomicoNome(cor);
a.randomicoOlhos(numeroOlhos);
}
}