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

helpi :( Java primeiro trabalho

Discussão em 'Programação' iniciada por paperless, 20 de Outubro de 2007. (Respostas: 49; Visualizações: 1572)

  1. paperless

    paperless Power Member

    Boa tarde, tenho um primeiro trabalho de Java para fazer mas estou com duvidas aqui numas coisas...

    Estou mesmo a nadar aqui.

    O que tenho de fazer é verificar se determinados valores de uma matriz (bidimensional) estão dentro de um certo limite (neste caso 0 e 9).

    Se estiverem tenho que printar a matriz e uma frase de confirmaçao a dizer que é valida se não tenho de printar a matriz e dizer que não tem nenhum valor entre 0 e 9.


    Onde eu estou com problemas é fazer essa verificação, não sei mesmo como é que posso fazer isso (sem ser manualmente entrada a entrada e isso não quero porque tem de dar para uma qualquer matriz).
     
    Última edição: 20 de Outubro de 2007
  2. SoundSurfer

    SoundSurfer Power Member

    Qual é o problema de verificar 1 a 1?

    Basta 2 "for" encadeados.
     
  3. paperless

    paperless Power Member

    Por exemplo, com este código quer a matriz esteja bem ou mal aquilo faz o que está no if (por isso nem ponho o else aqui).

    O que estara mal?

    Código:
    for (int linha = 0; linha != matriz_a_usar.length; linha++) {
    
        for (int coluna = 0; coluna != matriz_a_usar[linha].length; coluna++)
    
        {
    
    
            if (matriz_a_usar[linha][coluna] >= 0 && matriz_a_usar[linha][coluna] <= 9)
            {
                System.out.print( + matriz_a_usar[linha][coluna] + " ");
            }
     
  4. hYpe

    hYpe [email protected] Member

    Estás a usar uma matriz com valores 'invalidos' ?
     
  5. paperless

    paperless Power Member

    Sim para testar.

    EDIT: não consigo fazer >= ou <= com int[][] qual a minha alternativa?
     
    Última edição: 20 de Outubro de 2007
  6. HecKel

    HecKel The WORM

    Suponho que o tipo de dados que a matriz admite seja inteiros, certo?

    Já agora, porquê o "mais" logo após o abre parêntesis?

    Código:
    System.out.print( + matriz_a_usar[linha][coluna] + " ");[/quote]
    
    Não percebi a utilidade disso.
     
  7. paperless

    paperless Power Member

    provavelmente tinha la qualquer coisa que apaguei e depois esqueci-me de tirar o +.

    Yup, a matriz é composta por números inteiros.
     
  8. HecKel

    HecKel The WORM

    Não perguntei como ela é composta, quero é saber como ela está declarada :P Isso influência na comparação ;)
     
  9. paperless

    paperless Power Member

    ah ok.

    as matrizes estão declaradas desta forma (que não posso alterar):

    Código:
         int[][] matriz_correcta = {{1, 0, 3, 0, 0, 5, 6, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 7, 0, 0, 0, 0, 0},
                    {0, 0, 0, 8, 0, 0, 0, 4, 0},
                    {0, 0, 2, 0, 0, 0, 0, 6, 0},
                    {0, 0, 4, 0, 0, 0, 0, 0, 0},
                    {0, 0, 5, 0, 0, 0, 0, 0, 0},
                    {0, 0, 9, 0, 0, 0, 0, 0, 0}};
    Depois no restante código aparece matriz_a_usar porque antes diz-se que ela é igual ou à correcta ou à incorrecta, para que se faça o teste rapidamente.
     
  10. HecKel

    HecKel The WORM

    Mas e a matriz_a_usar? É esta que interessa saber pois é essa que estás a usar :P
     
  11. paperless

    paperless Power Member

    Sim mas é a mesma coisa (acho) porque antes faço isto:

    int[][] matriz_a_usar = matriz_correcta;
     
  12. HecKel

    HecKel The WORM

    Tipo..., já olhaste para o conteúdo da matriz? :X

    É TUDO maior ou igual a 0 e TUDO menor ou igual a 9..., é normal imprimir sempre tudo :x
     
  13. paperless

    paperless Power Member

    Eu sei mas quando testava com a matriz incorrecta (ja num estado mais a frente do que nesse meu outro post) o texto de erro suposto aparecia no lugar dos numeros.

    Ja apaguei isso, agora tou a fazer as coisas em separado e primeiro tou a printar a matriz e depois (quando souber como) é que vou por o texto de erro ou sucesso.

    Código:
    int[][] matriz_incorrecta = {{1, 0, 3, 0, 0, 5, 6, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 7, 0, 0, 0, 0, 0},
                    {0, 0, 0, 8, 0, 0, 0, 4, 0},
                    {0, 0, 2, 0, 0, 0, 0, 6, 0},
                    {0, 0, 4, 0, 0, 0, 0, 0, 0},
                    {0, 0, 5, 0, 0, 0, 0, 0, 11},
                    {0, 0, 9, 0, 0, 0, 0, -1, 0}};
     
  14. HecKel

    HecKel The WORM

    Isto vai parecer parvo..., mas experimenta isto:

    substituir isto:
    Código:
    if (matriz_a_usar[linha][coluna] >= 0 && matriz_a_usar[linha][coluna] <= 9)
    Por isto:

    Código:
    if ((matriz_a_usar[linha][coluna] >= 0) && (matriz_a_usar[linha][coluna] <= 9))
    Não me recordo de qual é a prioridade dos operadores de comparação, julgo que a tua linha estava correcta, no entanto mete estes parêntesis para garantir que as comparações são feitas como queremos.

    Não vejo qualquer problema no teu código, o único local onde pode haver maravilha é aí..., ou então também estou cego :x às vezes os erros são coisas tão triviais que dá vontade de bater com a cabeça na parede :P Estamos horas em frente ao código e nunca os vemos :P
     
  15. paperless

    paperless Power Member

    Já pus, funciona a mesma mas onde eu estou mesmo com dificuldades não é a printar a matriz é a poder "ver" se os valores estão entre 0 e 9 ou não para poder dar as tais mensagens.

    Experimentei:

    Código:
             
    (...)
    int valor[][] = matriz_a_usar;
             
             for (int linha = 0; linha != matriz_a_usar.length; linha++) {
    
                    for (int coluna = 0; coluna != matriz_a_usar[linha].length; coluna++)
                        
                        if (valor >= 0 && valor <= 9)
    (...)
    So que nao da porque o proprio eclipse diz que não da para fazer essas comparações, é este o principio?
    É para usar a cadeia de fors da mesma forma, certo?
     
  16. HecKel

    HecKel The WORM

    Claro que não, estás a tentar comparar um array bi-dimensional com um inteiro, é óbvio que dá erro.

    Tens de aceder à posição (como inicialmente).

    Experimenta o código que te dei ;)
     
  17. paperless

    paperless Power Member

    Nem tinha reparado que aquilo era if, pensava que aquilo era o for peço desculpa.

    Bem...não dá, o resultado (com a matriz incorrecta) é este:

    Ou seja, ele (por causa de mim) printa uma frase para cada valor da matriz e no sitio em que "estariam" (na matriz) os valores inválidos aparece matriz incorrecta. :lol:

    O código inteiro é este:

    Código:
    for (int linha = 0; linha != matriz_a_usar.length; linha++) {
    
        for (int coluna = 0; coluna != matriz_a_usar[linha].length; coluna++)
            
            System.out.print(matriz_a_usar[linha][coluna] + " ");
            System.out.println();
    }
            
             
             for (int linha = 0; linha != matriz_a_usar.length; linha++) {
    
                    for (int coluna = 0; coluna != matriz_a_usar[linha].length; coluna++)
                        
                if ((matriz_a_usar[linha][coluna] >= 0) && (matriz_a_usar[linha][coluna] <= 9))
                
                    System.out.print("Matriz Correcta (todos os valores estão no intervalo [0-9])");
                
                    else 
                        
                        System.out.print("Matriz Incorrecta (contém valores fora do intervalo [0-9])");
    
     
    Última edição: 20 de Outubro de 2007
  18. HecKel

    HecKel The WORM

    Agora fiquei sem saber o que queres..., obtens 2 resultados a dizer valor incorrecto..., é isto que queres, não?
     
  19. paperless

    paperless Power Member

    O que eu queria era que se houvesse um valor que fosse incorrecto aquilo dissesse logo que a matriz era incorrecta (uma vez) e se não houvesse que dissesse que a matriz era correcta.
     
  20. HecKel

    HecKel The WORM

    ahhh, podias ter dito logo :P

    Então tens de criar uma variável de controlo para isso ;)

    Define ANTES do for:
    Código:
    int CHECK = 0;
    Na condição do for mete o seguinte:
    Código:
    for (int linha = 0; linha != matriz_a_usar.length || [B]CHECK != 1[/B]; linha++) { 
         for (int coluna = 0; coluna != matriz_a_usar[linha].length || [B]CHECK != 1[/B]; coluna++)
    Dentro do else adiciona esta linha:
    Código:
    CHECK = 1;
    Isto deve dar ;)
     

Partilhar esta Página