1 votes

Vérifier si un tableau est l'inverse d'un autre tableau en java

J'essaie de créer une méthode qui prend 2 tableaux d'int comme paramètre d'entrée et retourne true si les tableaux sont inversés et false sinon. C'est ce que j'ai fait jusqu'à présent mais c'est faux.

public static void main(String[] args)
{
    int b,a;
    int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
    int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,14};
    boolean check = true;

    for (a=0;a<data1.length;a++)
    {
      for (b=data2.length-1;b>=0;b=b-1)
      {
                  if (data1[a] != data2[b])
                      check=false 
      }
    }
    System.out.println(check);
}

Je suppose que les deux tableaux sont de la même longueur. Quelqu'un peut-il m'aider ?

7voto

Jon Skeet Points 692016

Vous n'avez pas besoin de deux boucles - vous n'avez besoin de boucler qu'une seule fois, en utilisant l'index "normalement" dans un tableau, et depuis l'autre extrémité pour l'autre tableau :

public static boolean checkReversed(int[] x, int[] y)
{
    // For production code, possibly add nullity checks here (see comments)
    if (x.length != y.length)
    {
        return false;
    }
    // Loop through x forwards and y backwards
    for (int i = 0; i < x.length; i++)
    {
        if (x[i] != y[y.length - 1 - i])
        {
            // As soon as we've found a "mistake" we can exit:
            // This is simpler (IMO) than keeping a "check" variable
            return false;
        }
    }
    return true;
}

3voto

codaddict Points 154968

Vous pouvez essayer de le faire :

// compare the length.
check = (data1.length != data2.length)?false:true;

// if lengths are equal..go ahead and compare elements in reverse.
if(check) {    
    for(int i=0,j=data2.length;(i<data1.length) && (j>=0);i++,j--) {
        // if you find a mismatch..set check to false..and break
        // no need to compare other ele.
        if(data1[i] != data2[j]) {
            check = false;
            break;
        }
    }
}

2voto

sondra.kinsey Points 138

Dans ce cas, les deux longueurs de tableau doivent être égales. alors

for(int i=0,j=array.length;i<array.length,j=0;i++,j--){
  write your comparison logic here
}

2voto

Kai Chan Points 1662

Votre code compare en fait chaque élément de data1 avec chaque élément de data2 et imprime faux s'il y a un seul désaccord. Ce n'est pas ce que vous voulez faire.

2voto

matdumsa Points 6779

Voici une réponse à votre question dans un fichier .java complet

//yeah.java
public class yeah {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
        int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,12};

        System.out.println(isReverse(data1, data2));
    }

    public static boolean isReverse(int[] a, int[] b)
    {
        if (a.length != b.length)   //If a and b are not of the same length how can they be reverse?
            return false;
        for (int i=0;i<a.length;i++)
            if (a[i] != b[a.length-i-1])
                return false;
        return true;
    }

}

Juste un petit mot sur la méthode et les fonctions Dès que vous découvrez qu'elles ne sont pas inversées, vous devriez sortir en utilisant une déclaration de retour pas besoin de continuer à calculer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X