Compare Signs in Java

Aufrufe: 1094     Aktiv: 10.01.2021 um 17:54

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

}

Diese Frage melden
gefragt

Student, Punkte: 66

 
Kommentar schreiben
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)

Diese Antwort melden
geantwortet

Schüler, Punkte: 455

 

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

  ─   sayuri 09.01.2021 um 11:23

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 09.01.2021 um 20:35

vielen Dank!

  ─   sayuri 09.01.2021 um 22:17

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

  ─   daniel.kuenkel 09.01.2021 um 22:23

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

  ─   sayuri 09.01.2021 um 22:31

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

  ─   daniel.kuenkel 09.01.2021 um 22:32

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

  ─   sayuri 10.01.2021 um 09:31

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 10.01.2021 um 16:21

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

  ─   sayuri 10.01.2021 um 17:31

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 10.01.2021 um 17:37

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

  ─   sayuri 10.01.2021 um 17:40

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 10.01.2021 um 17:43

Warum ist Leetcode krank? woow cool!

  ─   sayuri 10.01.2021 um 17:44

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

  ─   daniel.kuenkel 10.01.2021 um 17:45

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

  ─   sayuri 10.01.2021 um 17:46

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 10.01.2021 um 17:48

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 10.01.2021 um 17:54

Kommentar schreiben