1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problemas em Java... Ajuda...

Discussão em 'Programação' iniciada por CrazyMonkeyTM, 22 de Novembro de 2006. (Respostas: 24; Visualizações: 2689)

  1. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    Recentemente na minha faculdade colocaram-nos os seguintes exercícos de avaliação... AQUI... O grande problema é que eu e a pessoa k está colocada no nosso grupo ainda nao entramos bem dentro da programação em java (foram muitos anos em C++), agradecia k nos desse uma ajuda a resolver os problemas, dando exemplos de resolução...
    Agradecemos desde já a atenção dispensada...

    Tks...
     
    Última edição: 22 de Novembro de 2006
  2. HecKel

    HecKel The WORM

    Passar de C++ para Java até deveria ser uma mais valia, pois (exagerando) java é C++ de forma MUITO simplificada.

    Na techzone não temos por hábito fazer trabalhos, ajudamos no que pudermos desde que coloquem dúvidas concretas (o que recomendo vivamente que o faças ;)).

    Já agora, também te recomendo a alterares/ocultares o teu email de forma a não ser detectado por bots de spam, relembro-te que este quadro está aberto até a guests (logo também bots de spam).

    abraços, HecKel
     
  3. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    Para dizer a verdade estamos com bastantes dificuldades na realização dos exercícios, mas nao obstante disso também estamos a tentar resolve-los...
    É um tiro no escuro mas pode ser k haja uma alma caridosa k nos de umas luses de como fazer pelo menos um...
     
  4. MadOnion

    MadOnion Folding Member

    Resolvam os projectos em C++ então.
    Como já foi dito pelo Heckel, passar de C++ para Java não é complicado, pelo contrário, é só obedecer à sintaxe.
    Existem métodos que são chamados pelas classes, o caso dos métodos estáticos, por exemplo, Math.PI(), devolve o valor do PI que está guardado num double, que neste caso PI até é uma constante porque está com letra maíscula.
    Existem os métodos não estáticos, que para serem chamados necessitam da criação de um objecto, por exemplo, uma classe Carro criada por ti, Carro car = new Carro(); e pra chamar um método da class Carro, basta fazer car.metodo().
    Enfim, começa por fazer programas simples, pra ver como o java funciona.

    Tem em atenção que quando programas uma classe, os atributos têm que ser privados, tem que existir sempre um Constructor, e os metódos que o cliente pede são todos publicos, excepto metódos auxiliares que são precisos para a resolução de outros metódos.
    Aconselho-te a usar e bem, a API do java-> Link

    Qualquer dúvida vai colocando, fazer exercícios a techzone não tem por norma fazer isso, só ajudar.
     
  5. PrOdG

    PrOdG Power Member

    .. ou protected ou até mesmo públicos para evitar setters e getters.
     
  6. HecKel

    HecKel The WORM

    ... no entanto, públicos pode não ser uma boa politica se os setters não forem imediatos :P

    abraços, HecKel
     
  7. MadOnion

    MadOnion Folding Member

    Ou static para metodos estáticos, ou atributos que não façam parte do estado do objecto, nunca classe que não tenha o main().
    Ou final para constantes, ok obrigado pelo reparo.

    Normalmente eu declaro sempre os atributos como privados, excepto atributos para saber o tamanho de alguma coisa, ou quantidade etc. Nos métodos é que por vezes é necessário usar o protected. Mas no meu nível(que não é avançado nem pouco mais ou menos), oscilo entre o public, private e o protected. :)
     
  8. RS

    RS Power Member

    Quanto à questão, se dissesses especificamente quais as dúvidas que te surgiram e aos teus colegas ao tentar resolver os exercícios, era mais fácil ajudar-te. Assim como apresentas o problema obrigas, quem te queira ajudar, a resolver os exercícios e isso não é fixe :)

    Quanto à questão sobre o tipo de acesso aos métodos e variáveis, é sempre boa política declarar
    variáveis como private e fazer os respectivos getters públicos. Protected será usado para acessos dentro do mesmo package.

    MadOnion tou a ver que andas aplicado :P
     
  9. RuiSetsFire

    RuiSetsFire Power Member

    java nunca é um tiro no escuro se:
    1. já souberes a lógica da programação
    2. se usares o java API -->http://java.sun.com/j2se/1.4.2/docs/api/
    (atenção a versao do compilador, aí é a api para o 1.4.2, mas ja se usa muito o 5.0, e gera alguns conflitos.
     
  10. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    E agora???

    Já comecei a fazer o segundo exercício (Calcular a média dos elementos externos de uma matriz) e penso k vou no caminho correcto, acontece k kd faço o run pa testar se está tudo direito ele pede-me correctamente o numero de colunas e o numero de linhas e fica-se por aí, ou seja, nao me pede para preencher os valores da matriz... o que está incorrecto nas linhas de código????
    :(
    ___________________________________________________________________________
    import java.util.Scanner;
    import java.util.Formatter;

    /**
    *
    * @author CrazyMonkey
    */
    public class Main {

    public static Formatter out=new Formatter (System.out);
    public static Scanner in=new Scanner (System.in);



    public Main() {
    }


    public static void main(String[] args) {

    float [][] mat;
    int m, n;

    out.format("%s%n","Qual o número de linhas da matriz?");
    m=in.nextInt();
    out.format("%s%n","Qual o número de colunas da matriz?");
    n=in.nextInt();

    mat=new float[m][n];
    inserirElementos(mat, m, n);
    }


    public static void inserirElementos(float[][] mat, int m, int n)

    {
    for (int i=0; i<m; i++){
    for (int j=0; j<n; j++){
    out.format("%s&n","Qual o elemento da matriz?");
    mat[j]=in.nextInt();
    }
    }
    }
    }
     
  11. MadOnion

    MadOnion Folding Member

    Testei o programa e funciona, embora a sintaxe seja algo estranha, funciona na perfeição para o que pretendes fazer, qual é a duvida?
     
  12. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    Nova dúvida...

    Agora surgiu nova dúvida no mesmo exercício...
    Fiz como me disseram (Fazer em C++ e depois "transpor" para Java), mas acontece k nao consigo fazer a soma dos elementos da matriz... Aki vai o exercício como está resolvido... Qual é o mal já que o meu prof nao ajuda em nada... >(

    package exerc2;
    import javax.swing.*;
    import java.util.Scanner;
    import java.util.Formatter;

    /**
    *
    * @author CrazyMonkey
    */
    public class Main {

    public static Formatter out=new Formatter (System.out);
    public static Scanner in=new Scanner (System.in);



    public Main() {
    }


    public static void main(String[] args) {

    float [][] mat;
    int m, n;

    out.format("%s%n","Qual o número de linhas da matriz?");
    m=in.nextInt();
    out.format("%s%n","Qual o número de colunas da matriz?");
    n=in.nextInt();

    mat=new float[m][n];


    inserirElementos( mat, m, n);
    calcMedia (mat, m, n);

    }


    public static void inserirElementos(float[][] mat, int m, int n)

    {


    System.out.println("Quais os elementos da matriz?");
    //out.format("%s&n","Quais os elementos da matriz?");
    for (int i=0; i<m; i++){
    for (int j=0; j<n; j++){
    mat[j]=in.nextInt();
    }
    }
    }

    public static void calcMedia(float [][] mat, int m, int n)
    {
    int cont; float soma; int x; int y;
    cont=0;
    soma=0;

    for (x=1; x<n; x++){
    soma = soma + mat[1][x]; //1ª linha
    cont=cont++;
    }
    for (x=1; x<n; x++){
    soma = soma + mat[m][x]; //ultima linha
    cont=cont++;
    }
    for (y=2; y<(m-1); y++){
    soma = soma + mat[y][1]; //1ª coluna
    cont=cont++;
    }
    for (y=2; y<(m-1); y++){
    soma = soma + mat[y][n]; //ultima coluna
    cont=cont++;
    }
    float media=0;
    media=soma/cont;
    System.out.println("A média dos elementos exterires da matriz é:"+ media);
    }
    }

    A dúvida será pois o cálculo da média...
    Agradeço desde já toda a ajuda prestada e ainda bem k existem foruns como a Tchzone...
    :x2:
     
  13. MadOnion

    MadOnion Folding Member

    O problema é que as matrizes em java são algo complicadas.
    Uma matriz é um vector de vectores, isto é, cada posição do vector contém outro vector na vertical.
    Vou esboçar algo no papel, ou no paint, e já meto aqui.
    Entretanto vou ver o código, e já dou a dica também.

    Cumps
     
  14. MadOnion

    MadOnion Folding Member

    [​IMG]

    Na imagem, o primeiro esboço, corresponde ao codigo java:
    Código:
    int[] vector;
    
    Quer dizer que vector é uma referência que guarda o endereço de um vector de inteiros que não está a apontar para nada.

    No segundo esboço:
    Código:
    int[] vector = new int[6];
    
    Está criado um vector de inteiros cujo o nome é vector, é um vector de 6 posições, que inicialmente estão a 0(O java faz isso automaticamente).

    No terceiro esboço:
    Código:
    int[][] vector = new int[5][3];
    
    Para além do segundo esboço, cada posição, ou seja, cada vector[x][xpto] em que o x é a linha, diz que cada posicao dessa linha está a apontar para outro vector. É assim que funcionam as matrizes em java. Ao fim ao cabo corresponde a 3 linhas e 5 colunas.


    Entretanto modifiquei um pouco o programa, não prometo é que funcione, mas dá para uma matriz de [2][2], o resto fazes tu.

    PHP:
    import java.util.Scanner;

    /**
     *
     * @author CrazyMonkey
     */
    public class Main {
        
        private static 
    Scanner sc;
        public 
    Main() {
            
        }
        
        
        public static 
    void main(String[] args) {
            
            
    sc = new Scanner(System.in);        
            
    double [][] mat;
            
    int mn;
            
            
    System.out.print("Qual o número de linhas da matriz? ");
            
    sc.nextInt();
            
    System.out.print("Qual o número de colunas da matriz? ");
            
    sc.nextInt();
            
            
    mat = new double[m][n];
            
            
    System.out.println("Quais os elementos da matriz");
            
    inserirElementosmatmn);
            
    System.out.print("A media dos elementos exteriores e': " calcMedia (matmn));
                    
        }
        
        
        public static 
    void inserirElementos(double[][] matint mint n) {    
            
            try {
            for (
    int i 0mi++) {
                for (
    int j 0nj++)
                    
    mat[i][j]= sc.nextInt();
            }
            } catch(
    ArrayIndexOutOfBoundsException e) {
                
    System.err.print("Tamanho da matriz excessiva");
            }
            
            
            
        }
        
        public static 
    double calcMedia(double [][] matint mint n)
        {
            
    int size mat.length 1;
            
    double soma 0.0;
                
            
    soma mat[0][0] + mat[0][size] + mat[size][0] + mat[size][size]; //1ª linha
            
    return soma 4.0;
        }
    }
    Simplifiquei alguma informação desnecessária.
    Cumps, e dispõe :)
     
  15. Pure_Water

    Pure_Water Power Member

    offtopic: olha uma camarada do DI da fcul :D
     
  16. MadOnion

    MadOnion Folding Member

    Eu também sou :002:
     
  17. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    Entendi perfeitamente a primeira parte, mas quando fazes o cálculo da média fiquei confuso...
    Corres todos os elementos um a um é isso???
    O enunciado do problema e este:
    Ex:
    31 52 34 4 86 5 65 7 67 5.3
    265 6 3 2 8 56 67 6572 1 176
    37 7 5.8 6.9 6 7 6 56 3583 7
    48 4 66 4.7 34 65 67 5 6
    58 6 4 6.9 5 56 567 76 9 67
    Resultado: 67,32

    Ou seja, deverá aceitar valores decimais (double), mas quando testo na tua versão dá erro...
    A verdade é que já estou a desesperar com isto...
    Java para mim é completamente novo e já à algum tempo k não utilizo sequer o c++, mas ainda domino razoavelmente...
    Obrigado desde ja pela ajuda...
     
  18. CrazyMonkeyTM

    CrazyMonkeyTM Banido

    Já funciona...

    Graças a uma Luz divina o prog ja funca...
    :D
    cá vai a versao final...

    package exerc2;
    import javax.swing.*;
    import java.util.Scanner;
    import java.util.Formatter;

    /**
    *
    * @author CrazyMonkey
    */
    public class Main {

    public static Formatter out=new Formatter (System.out);
    public static Scanner in=new Scanner (System.in);


    public static void main(String[] args) {

    float [][] mat;
    int m, n;

    out.format("%s%n","Qual o número de linhas da matriz?");
    m=in.nextInt();
    out.format("%s%n","Qual o número de colunas da matriz?");
    n=in.nextInt();

    mat=new float[m][n];


    inserirElementos( mat, m, n);
    ver(mat,m,n);

    calcMedia (mat, m, n);

    }
    //////////////////////////////////////////////////////////
    private static void ver(float[][] mat, int m, int n){
    int i,j;
    for(i=0;i<m;i++){
    for(j=0;j<n;j++)
    out.format("%6.2f",mat[j]);
    out.format("%n");
    }
    }
    //////////////////////////////////////////////////////////

    public static void inserirElementos(float[][] mat, int m, int n)

    {


    System.out.println("Quais os elementos da matriz?");
    //out.format("%s&n","Quais os elementos da matriz?");
    for (int i=0; i<m; i++){
    for (int j=0; j<n; j++){
    mat[j]=in.nextInt();
    }
    }
    }

    public static void calcMedia(float [][] mat, int m, int n)
    {
    int cont; float soma; int x; int y;
    cont=0;
    soma=0;

    for (x=0; x<n; x++){
    soma = soma + mat[0][x]; //1ª linha
    cont++;
    }
    for (x=0; x<n; x++){
    soma = soma + mat[m-1][x]; //ultima linha
    cont++;
    }
    for (y=1; y<(m-1); y++){
    soma = soma + mat[y][0]; //1ª coluna
    cont++;
    }
    for (y=1; y<(m-1); y++){
    soma = soma + mat[y][n-1]; //ultima coluna
    cont++;
    }
    System.out.println("soma="+soma);
    System.out.println("cont="+cont);

    float media=0;
    media=soma/cont;
    System.out.println("A média dos elementos exterires da matriz é: "+ media);
    }
    }


    Mais uma vez obrigado pela ajuda... :)
     
  19. MadOnion

    MadOnion Folding Member

    Os valores que estão a ser colocados na matriz são inteiros, tens que modificar, eu sei onde está, mas não vou dizer. E tem mais um erro.
    Ao meteres numeros decimais, tens que usar a "," e não o ".".
    Outro erro, tem a ver no metodo media, por causa do tamanho do vector.

    Para ir buscar o numero de elemento de uma linha, é fazer matriz[0][matriz[0].length - 1], e tens por exemplo, o ultimo valor da primeira coluna. E assim sucessivamente.

    Usa o eclipse, é melhor para despiste de erros.

    Edit: já vi que resolveste, tinha isto em edit, e tinha ido jantar.
    Usa double em vez de float, por vezes é preciso anexar um f no fim, de um valor, por exemplo se fizeres:
    Código:
    float soma = 0.0;
    soma = 4 + 2.0;
    
    Acho que o resultado vem em double, para forçar um float tem que ser:
    Código:
    float soma = 0.0f;
    soma = 4 + 2.0f;
    
    Edit2:
    declara as variáveis contadores do for dentro do próprio:
    Código:
    for (int x = 0; x < xpto; x++)
    
    A variável x só é usada dentro do for, quando o for acaba, o espaço reservado pelo java de 32bytes, é de imediato apagado.
    Cumps
     
    Última edição: 12 de Dezembro de 2006
  20. pack

    pack Power Member

    Eu tambem sou :) :004: FCUL ao poder
     

Partilhar esta Página