Compare Signs in Java

Aufrufe: 118     Aktiv: 1 Woche her

0

Hallo zusammen

Da ich sehr neu in der Programmierung bin, wollte ich euch fragen,wie man am besten so etwas programmiert?

Compare Signs Write a program that compares the sign of pairs of 32-bit numbers from two arrays of numbers and counts how many of them have a different sign.

Mein Vorschlag: Zuerst muss ich doch beide Arrays vergleichen, und dabei jeweils die unterschliedlichen Vorzeichen notieren oder? Z.B. wie hier? Brauch ich dazu eine For oder eine While Schleife? Ich bräuchte doch zwei For Schleifen einmal eins für i und das andere Mal für j, aber wie finde ich das Vorzeichen heraus?

Array1 = 1 3 4 5 6 Array2 = 3 4 5 6 -3 Count = 1

public int compareSign(int count){

int [] a1 = new Int[]; int [] a2 = new Int[];

for(int i = 0; i < a1.length; i++){ for(int j = 0; j < a2.length; j++){ if(a1[i] == a2[j]) return } }

}

gefragt 2 Wochen, 5 Tage her
sayuri
Student, Punkte: 36

 
Kommentar schreiben Diese Frage melden
1 Antwort
1
public static int compareSign(int[] a, int[] b) {
    int count = 0;
    int max_len = Math.min(a.length, b.length);
    for (int i = 0; i < max_len; i++) {
        if ((a[i] >> 31) + (b[i] >> 31) == -1) count++;
    }
    return count;
}

Du nimmst im Endeffekt als Parameter die beiden Arrays a und b. Ich habe die Aufgabe so verstanden, dass du jedes Paar also die Werte am gleichen Index der beiden Arrays vergleichen sollst, daher eine for-Schleife, wobei "i" genau dieser Index ist. "max_len" beschreibt die kleinere Länge der beiden Arrays, weil wenn ein Array größer ist, kannst du nur bis zum letzten Index des kleineren Arrays vergleichen (Math.min() ist eine Funktion, die den kleineren der beiden Werte zurückgibt) ... Um zu entscheiden, ob ein Wert ein negatives oder positives Vorzeichen hat, solltest du dir den Aufbau eines 32-Bit-Integers anschauen und verstehen wie das Vorzeichen gespeichert wird (Stichwort: Zweier-Komplement) ... Kurz zusammengefasst: Das vorderste Bit gibt das Vorzeichen an (1: negativ, 0: positiv) ... was ich gemacht habe, ist, dass ich mit >> die 31 hintersten Bits weggeschoben habe und damit nur noch das vorderste, also das Vorzeichenbit, betrachte (wenn die Zahl negativ ist, dann ist der interpretierte int-Wert = -1, sonst 0 ... 0-1 oder -1+0 == -1 --> zwei verschiedene Vorzeichen und somit count++ (hoffe es hat dir geholfen)

geantwortet 2 Wochen her
daniel.kuenkel
Schüler, Punkte: 190
 

Vielen Dank für deine ausführliche Antwort! Musst du nicht shiften und danach mit XOR vergleichen?

  ─   sayuri 1 Woche, 1 Tag her

Da gibt es viele Möglichkeiten. Ich denke, dass du auch erst beide shiften und dann mit XOR verknüpfen kannst, wobei die beiden Zahlen unterschiedliche Vorzeichen haben, wenn das Ergebnis der XOR-Operation ungleich 0 ist (also -1) ... Das kannst du mal ausprobieren.

  ─   daniel.kuenkel 1 Woche her

vielen Dank!

  ─   sayuri 1 Woche her

Kann ich fragen, ob du Informatik studierst, oder welches Semester du gerade bist?

  ─   daniel.kuenkel 1 Woche her

ja, klar bin im 3. Semester. Hast du Informatik studiert?

  ─   sayuri 1 Woche her

Bin gerade noch in der 12. Klasse, aber dann werde ich auch Informatik studieren

  ─   daniel.kuenkel 1 Woche her

cool :) du kennst dich ja schon mit Java und so aus? Hast du es dir selber beigebracht? Wie lange machst du das?

  ─   sayuri 1 Woche her

Ja ich programmiere schon seit ein paar Jahren und habe es mir selber durch Bücher, Videos usw. beigebracht. Das wichtigste ist, dass man selber viel programmiert, z.B. in Form von eigenen kleinen Projekten und das du dir Algorithmen und Datenstrukturen anschaust ... Das habe ich früher auch nie gemacht, aber das ist extrem wichtig!

  ─   daniel.kuenkel 1 Woche her

wie lange hast du gebraucht, bis du das Programmieren gelernt hast? Genau bei der Programmierung habe ich recht Mühe...

  ─   sayuri 1 Woche her

Das dauert schon recht lange meiner Meinung nach. So richtig angefangen habe ich mit Java, bin aber nicht weiter gekommen als irgendwelche if-Anweisungen. Dann habe ich mich intensiver mit objektorientierter Programmierung beschäftigt, wobei das allgemein für jedes Projekt am wichtigsten war (also nochmal Objektorientierung anschauen mit all seinen Bestandteilen wie Datenkapselung, Vererbung, Polymorphie usw.) und dann eben wie schon angesprochen Algorithmen und Datenstrukturen. Ich habe selber z.B. einfach eine Liste aus der Standard-Bibliothek benutzt, anstatt zu verstehen wie eine Liste funktioniert oder wie ich eine selber programmieren kann. Also ich kann dir 3 Dinge raten: Schau dir nochmal alle Konzepte deiner Programmiersprache an z.B. Java und auch wie sie mit den jeweiligen Schlüsselwörtern umgesetzt werden. Dann schau dir Objektorientierung an und als letztes Algorithmen und Datenstrukturen, wobei du z.B. auf Leetcode Aufgaben dazu lösen kannst ... das stärkt deine Problem-Solving-Kompetenz

  ─   daniel.kuenkel 1 Woche her

vielen herzlichen Dank, gibt bei Leetcode auch Lösungen, falls du nicht weiterkommst?

  ─   sayuri 1 Woche her

Leetcode ist krank ... Da gibt es Aufgaben unterteilt nach jeder Datenstruktur ... es gibt Aufgaben, die unterteilt sind nach Firmen, die diese Aufgaben in ihren Interviews gestellt haben (Google, Facebook usw) und es gibt zumindest für die meisten Aufgaben (in der kostenlosen Version) die Lösungen, welche auch Schritt für Schritt erklärt werden ... Das machen normalerweise Leute, die sich für ein Coding Interview bei FANG Unternehmen vorbereiten, also wird es dir sehr viel bringen!

  ─   daniel.kuenkel 1 Woche her

Warum ist Leetcode krank? woow cool!

  ─   sayuri 1 Woche her

"krank" im Sinne von "geil", dass es so eine Plattform gibt ... hat mir persönlich auch sehr geholfen

  ─   daniel.kuenkel 1 Woche her

achso, cool vielen herzlichen Dank!!!!! Man braucht sehr viel Geduld mit der Programmierung!!!!!! Manchmal benötige ich sooooooo lange bis ich etwas schnalle...

  ─   sayuri 1 Woche her

Ja, das stimmt! Das Problem liegt halt bei den Unis. Ich habe beim KIT so eine Vorlesung gesehen über Programmierung. Die Dozentin liest es gefühlt runter wie ein Buch ... so ist es schwierig und man muss sich eigentlich 80% davon selbst beibringen!

  ─   daniel.kuenkel 1 Woche her

Genau, sie stellen jede Woche etwas vor und sagen, mach etwas und nächste Woche ein neues Thema und wenn du ein Problem so lange dran bist, dann kommst du irgends...

  ─   sayuri 1 Woche her
Kommentar schreiben Diese Antwort melden