Jump to content
Sign in to follow this  
darkangel_13

Duvida em java , simples

Recommended Posts

darkangel_13

Boa tarde , estou com uma duvida, estava a tentar fazer um exercicio que tem como objectivo descobrir o menor numero cujo o factorial é maior que k ...

Só que o código compila mas está com um erro de lógica , se me puderem ajudar.. cumps

public class fact{
 public static void main(String[] args ) {
   int k = 10 ;
   int fact=1;
   int menor = 0;
   do{
     for(int i = 1; i>1 ; i++){
       for(int j=i;j>=1;j--){
         fact=fact*j;
         if(fact>k)
           menor = j;
       }
     }
   }while(fact <= k ); 
   System.out.println("soma : "+menor);
 }
}

Share this post


Link to post
Share on other sites
thoga31

Separa o factorial para uma função à parte, primeiro que nada, para que possas aplicar no Main directamente este algoritmo:

i = 1

Fazer
  Incrementa i
Enquanto factorial(i) <= k;

Escrever i


Knowledge is free!

Share this post


Link to post
Share on other sites
darkangel_13

Separa o factorial para uma função à parte, primeiro que nada, para que possas aplicar no Main directamente este algoritmo:

i = 1

Fazer
Incrementa i
Enquanto factorial(i) <= k;

Escrever i

acho que já entendi ..

Ainda não testei mas penso que seja isto

public class fact{
 public static void main(String[] args ) {
   int k = 10 ;
   int fact=1;
   int menor = 0;
   do{
     int i =0;
     for(int j=i;j>=1;j--){
       fact=fact*j;
       if(fact>k)
         menor = j;
       }

       i++;

     }
   }while(fact <= k );
   System.out.println("soma : "+menor);
 }
}

Assim ?

Edited by Rui Carlos
Indentação

Share this post


Link to post
Share on other sites
HappyHippyHippo

não ... pensa bem no problema : menor numero cujo o factorial é maior que k

1º - saber o factorial

2º - saber se o factorial é maior que k

são dois passos distintos

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

Saber factorial

public static int fact(int n ){
int fact =1; // guardar o factorial
for(int i =n ; i>=1;i--){
fact*=i;
}
return fact;
}

public static int menor(){
int i =0;
int k=10;
int fact=0;
do{
fact = fact(i);
i++;
}while(fact(i)<=k)
System.out.println("o menor é " + i );
}

Aproveitando esta thread eu tenho uma duvida , quando me pedem por exemplo isto "Defina em Java um tipo Cor cujos únicos valores sejam

os seguintes: amarelo, vermelho, azul, branco." - Estão a pedir-me para criar um tipo enumerado ?

Edited by darkangel_13

Share this post


Link to post
Share on other sites
HappyHippyHippo

ainda não está exactamente correcto, vê que estás a chamar a função fact duas vezes no mesmo ciclo, logo uma é desnecessária :

public static int menor(int k){
 int i = 0;
 while (fact(++i) <= k);
 System.out.println("o menor é " + i );
}

sim, está a pedir para criares um tipo enumerado


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

Então por exemplo .

enum cor {'amarelo', 'vermelho', 'azul', 'branco'};

Será assim ?

Estou a fazer uma classe que me vai criar um tabuleiro

Como é que eu geraria um tabuleiro com os tipos enumerado ?

import java.util.Random;
public class Tabuleiro{
static final int[] tabuleiro = new int [20];
[b]enum cor {'amarelo', 'vermelho', 'azul', 'branco'};
public Tabuleiro(){
Random rd = new Random();
for(int i=0;i<=tabuleiro.length-1;i++){
tabuleiro[i]=..  // para atribuir uma cor
}
}
/*
*Metodo da a dimensao
**/
public static int dimensao(){
return tabuleiro.length;
}
/**
 *um método com a assinatura Cor cor(int casa) que, assumindo que 1≤casa≤
 *dimensao() , devolve a cor da casa dada;
 **/
public static Cor cor(int casa){
// tipo enumarado ?
}
}

No metodo Cor como é que eu o completaria ?

Edited by darkangel_13

Share this post


Link to post
Share on other sites
HappyHippyHippo

no link que eu te apresentei, os valores da enumeração não eram strings mas sim identificadores


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

private final int cor1 = 0
private final int cor2 = 1
private final int cor3 = 2
private final int cor4 = 3

enum cor {'amarelo', 'vermelho', 'azul', 'branco'};

assim ?

Share this post


Link to post
Share on other sites
HappyHippyHippo

string : "amarelo" // <---- conjunto de bytes que cofifica o conjunto de caracteres de texto

identificador : amarelo // <---- nome com significado somente em código que representa um valor/método/classe/etc ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

import java.util.Random;
public class Tabuleiro{
static final int[] tabuleiro = new int [20];
enum cor{amarelo,azul,branco,vermelho};
public Tabuleiro(){
Random rd = new Random();
for(int i=0;i<=tabuleiro.length-1;i++){
tabuleiro[i]=..  // para atribuir uma cor
}
}
/*
*Metodo da a dimensao
**/
public static int dimensao(){
return tabuleiro.length;
}
/**
 *um método com a assinatura Cor cor(int casa) que, assumindo que 1≤casa≤
 *dimensao() , devolve a cor da casa dada;
 **/
public static Cor cor(int casa){
// tipo enumarado ?
}
}

Como é que eu poderia pegar nesse tipo enumerado e fazer um random para poder preencher as casas do tabuleiro ?

Share this post


Link to post
Share on other sites
HappyHippyHippo

Como é que eu poderia pegar nesse tipo enumerado e fazer um random

é uma maneira um bocado estranha, mas os dados enumerados são também objectos dos quais é possível adicionar métodos:

protected enum Cor {
   Amarelo,
   Azul,
   Branco,
   Vermelho;

   public static Cor getRandom() {
       return values()[(int) (Math.random() * values().length)];
   }
}

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

import java.util.Random;
public class Tabuleiro{
static final int[] tabuleiro = new int [20];
enum cor{amarelo,azul,branco,vermelho};
public Tabuleiro(){
Random rd = new Random();
for(int i=0;i<=tabuleiro.length-1;i++){
tabuleiro[i]=cor.getRandom();
}
}
/*
*Metodo da a dimensao
**/
public static int dimensao(){
return tabuleiro.length;
}
/**
 *um método com a assinatura Cor cor(int casa) que, assumindo que 1≤casa≤
 *dimensao() , devolve a cor da casa dada;
 **/
public static Cor cor(int casa){
// tipo enumarado ?
}

public static Cor getRandom() {
	return values()[(int) (Math.random() * values().length)];
}
}
}

Então seria assim que eu preencheria o tabuleiro?

Muito obrigado pelas respostas

é uma maneira um bocado estranha, mas os dados enumerados são também objectos dos quais é possível adicionar métodos:

protected enum Cor {
Amarelo,
Azul,
Branco,
Vermelho;

public static Cor getRandom() {
	return values()[(int) (Math.random() * values().length)]; // não percebo esta linha ...
}
}

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

seria se tivesses definido a enumeração como te disse : com o método getRandom

no entanto não o estás a fazer, logo a função getRandom não se encontra definida o que dará erro de compilaão na seguinte linha:

tabuleiro[i]=cor.getRandom();

olha bem para o que fiz : eu declarei uma enumeração com um método, e não um método estático solto da classe Tabuleiro


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
darkangel_13

Bom dia tenho outra duvida , estas duvidas surgem pois eu estou a estudar ...

Surgiu-me um exercicio que tem como objectivo substituir certas partes da frase .

Tenho como parte do enunciado isto :

String substituiCaracter(String frase1, String frase2, char ch1, char ch2) .

Exemplo de input : frase1 = “O aluno ***** teve * no exercicio * e * no exercicio *”

frase2 = “O ALUNO 54321 TEVE 5 NO EXERCICIO A”

ch1 = ‘*’ e ch2 = ‘%’

Output: “O aluno 54321 teve 5 no exercicio A e % no exercicio %”

Basicamente o objectivo é onde tem asterisco substituir pela mesma posição da frase 2 e quando não ha mais posição no asterisco substituir por % .

Eu já tentei fazer...

public static String substituiCaracter(String frase1, String frase2, char ch1, char ch2) {
String resultado = new String(frase1);
for(int i=0;i<resultado.length();i++){
if(resultado.indexOf(i)==ch1){
resultado = resultado.replace(resultado.indexOf(i), frase2.indexOf(i));
}
}
}

Ai está a minha ideia, só que não percebo como faço para verificar se existe mais posições para substituir por ch2 , será que tenho que fazer algum tipo de verificação deste genero

if(resultado.indexOf(i)==null && resultado.indexOf(i)==ch1)
resultado=resultado.replace(ch1,ch2);

Share this post


Link to post
Share on other sites
darkangel_13

String resultado = new String(frase1);
while(frase2.length() != null){
int i=0;

if(resultado.indexOf(i)==ch1){

resultado = resultado.replace(resultado.indexOf(i), frase2.indexOf(i));

}
i++;
}

algo assim?

Edited by darkangel_13

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • 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.