2016-05-22 10 views
-3

meine Kollegen Programmierer!Überprüfen, ob die Elemente eines Arrays die quadrierten Zahlen eines anderen sind

Dies ist das Problem, das ich derzeit versuche zu lösen. Wir haben 2 Arrays, sagen wir

a = new int[] {11, 12, 13, 14}; 
b = new int[] {121, 144, 169, 200}; 

Meine Aufgabe ist es, 2 Arrays zu vergleichen und zu überprüfen, ob 121 11 Quadrat ist; 144 ist 12 Quadrat; etc. Das ist mein Pseudo-Code:

  1. für jede int in dem Array ein und für jeden int in dem Array b,
  2. Check int i, wenn in einem == int j in b mit sich selbst multipliziert, dann Rückkehr wahr.
  3. andernfalls false zurückgeben.

Mein Code:

public static boolean squared(int[] a, int[] b) { 
for (int i : a) 
    for (int j : b) 
    if (b[j] == a[i]*a[i]) 
    return true; 
    return false; 
    } 
} 

Dieser Algorithmus Logik scheint mir fair, es besteht jedoch nicht den Test (ich löse es online). Da ich ein Newby bin, frage ich mich, was würden die erfahreneren Programmierer sagen, warum besteht sie nicht den Test? Was muss im Pseudocode und im Code selbst geändert werden, damit es true ergibt, wenn 121 = 11 * 11 und falsch für 200 = 14 * 14? Vielen Dank im Voraus.

UPD.:Danke allen! Das Problem ist behoben. Ich stimme zu, dass ich einen logischen Fehler gemacht habe, der für die erfahrenen Programmierer offensichtlich war; obwohl ich meine Frage heruntergestimmt sehe, brauchte ich wirklich lange, um den Fehler zu verstehen und ich glaube, es war es wert, gefragt zu werden.

+2

Im Code ist 'i' ein Wert aus dem' a' Array kein Index das gleiche gilt für 'j' – Titus

+0

Danke, Andrew, jetzt sehe ich wo ich falsch lag. – mohican93

+0

Ich bin mir sicher, dass du das selbst lösen kannst. Was passiert, wenn Sie die Elemente kurz vor dem Vergleich ausdrucken? – quamrana

Antwort

0

ersetzen Unter der Annahme, dass a und b die gleiche Größe haben und vorausgesetzt, Sie verwenden Java 8, können Sie dies nur tun:

return (IntStream.range(0, a.length).filter(i->a[i]*a[i]!=b[i]).count())==0; 
+0

Großartig! Danke @ joel314! Es half. – mohican93

0

Ihre Verwendung einer erweiterten for Schleife mit einem Array von Ganzzahl.

In dieser Situation für a = new int[] {11, 12, 13, 14}, a[i] innerhalb der ersten Schleife stellt a[11] und wird eine IndexOutOfBoundException werfen.

Sie sollten

for (int i : a)

mit

for (int i = 0 ; i < a.length ; i++)

Verwandte Themen