2010-03-05 4 views
1

En essayant de créer une méthode qui prend 2 int array comme paramètre d'entrée et renvoie true si le tableau est inversé et false sinon. C'est ce que j'ai jusqu'ici mais c'est faux.Vérifier si un tableau est l'inverse d'un autre tableau en Java

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); 
} 

Mon exemple est supposé imprimer vrai, mais il doesn't.I les 2 suis en supposant que les tableaux sont de la même longueur. Quelqu'un peut-il aider?

+0

devoirs? Veuillez marquer en conséquence. –

Répondre

7

Vous n'avez pas besoin de deux boucles - il vous suffit de boucle une fois, en utilisant l'indice « normalement » dans un tableau, et de l'autre extrémité de 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; 
} 
+0

je vois. Merci pour votre conseil! – Dan

+0

Pourquoi ajouteriez-vous des chèques de nullité? Je voudrais qu'une exception soit levée si je transmettais une valeur nulle pour l'un des tableaux. – Gabe

+0

@gabe: Vrai, pour Java. En C#, je voudrais lancer ArgumentNullException au lieu d'attendre NullReferenceException. Je n'arrête pas d'oublier que Java n'a pas ça, ce qui est ennuyeux :(Il est possible que si elles sont * both * null, vous voudrez peut-être retourner true si .. –

1

Vous pouvez le faire en une boucle, vous n'avez pas besoin de deux.

for (int i=0,j=end;i<end;i++,j--)

2

dans ce domaine, à la fois la longueur du tableau doit être égale. puis

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

Vous avez seulement besoin d'une variable - et votre condition est quelque peu étrange car elle inclut une affectation ... –

+0

oo, je suis nouveau à Java donc je n'ai pas encore appris. Merci pour l'aide! :) – Dan

3

vous pouvez essayer de 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; 
     } 
    } 
} 
2

Votre code compare en fait tous les éléments en data1 avec chaque élément avec données2 et imprime des faux s'il y a une discordance. Ce n'est pas ce que vous avez l'intention de faire.

2

ici est 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 une petite note sur la méthode et les fonctions .. Dès que vous découvrez qu'ils ne sont pas inversées, vous devez quitter l'aide d'un déclaration de retour .. pas besoin de continuer à calculer ..

+0

+1: Bonne approche. –

0

Cela peut être fait dans une seule boucle il n'y a pas besoin de deux boucles.

Par exemple:

for (int i = 0, j = last; i < last; i++, j--) 
Questions connexes