Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo Leute, ich werde bald eine Prüfung im Fach programmieren schreiben. Ich selber bin ein neueinsteiger und beschäftige mich zurzeit auch mit den basics. Nur was ich nicht verstehe ist wie ich Methoden mit arrays schreiben kann. Wir haben 3-4 Aufgaben wo diese meistens auftauchen. Das Problem ist da gibt es die meisten Punkte. Ich hoffe jemand hat das erforderliche wissen dazu und kann mir dabei helfen. Danke im voraus
Was heißt Methoden mit Arrays? Sollen Arrays empfangen (Parameter), zurückgegeben (return) oder damit gearbeitet werden? Zeige doch mal eine solche Aufgabe und sag uns wo du da genau deine Probleme hast.
Aufgabe 2) 12 Punkte
Schreiben Sie eine Methode public static int[] verschiebe(int[] zahlen, int schrittweite) ,
die die Zahlen eines Arrays vum die angegebene Schrittweite verschiebt, die Zahlen
die hinten aus em Array laufen sollen vorne wieder eingefügt werden. Beispiel: {1, 2, 3,
4, 5} mit einer Schrittweite von 2 soll {4, 5, 1, 2, 3} ergeben.
Aufgabe 3) 12 Punkte
Schreiben Sie eine Methode public static boolean hatUngeradeZiffern(int zahl) die nur
dann true liefert wenn alle Ziffern ungerade sind. Ohne Schleifen und if-Anweisungen.
Aufgabe 4) 15 Punkte
Schreiben Sie eine Methode public static boolean enthaeltPaar(String[] woerter) die
true liefert wenn das übergebene Array zwei aufeinanderfolgende gleich Wörter
enthält.
Aufgabe 5)
Schreiben Sie hinter die System.out.println Anweisung die Bildschirmausgabe oder
den Effekt der auftritt.
String[] t = new String[2];
String[] u = new String[3];
t[0] = "Haus";
t[1] = t[0];
t[0] = t[0].substring(0,3);
System.out.println(t[0] + "-" + t[1]);
System.out.println(t[1] + "-" + t[1]);
u = t;
t[0] = t[0] + "x";
u[1] = u[1] + "y";
System.out.println(t[0] + "-" + u[0]);
System.out.println(t[1] + "-" + t[1]);
System.out.println(u[2]);
Also so sieht mein Arbeitslatt aus und das ist erst 1/3 teil. Aber die meisten Punkte gibt es auch bei sowas.
Ich hoffe ich konnte dir zeigen was ich damit meine. Danke im.voraus
Meine Frage ist: Willst du dir das selbst, mit unserer Hilfe, erarbeiten oder nichts machen? Wenn es Letzteres ist, dann bitte HIER nochmal eine Anfrage stellen und auch eine Preisvorstellung mitliefern - denn im Leben ist nichts geschenkt.
Dann such Dir eine Aufgabe aus und versuch sie zu lösen. Wie weit kommst Du? An welchem Punkt kommst Du nicht weiter? Welche konkreten Fragen hast Du?
Es bringt Dich doch nicht weiter, wenn Du Musterlösungen vorgesetzt bekommst. Du willst doch in der Lage sein, solche Aufgaben zu lösen. Also setz Dich einfach dran und versuche es. Und schreib, wo du genau Hilfe brauchst. Wenn Du gar keinen Ansatzpunkt hast, würde mir jetzt nur eine Einführung in Java einfallen, die Du erst einmal durcharbeiten solltest.
Ich kenne arrays nur mit int Double float was man davor deklariert. Hier hat er mir eine Methode gegeben mit Array und ehrlich gesagt weiss ich nicht wie ich voran gehen muss. Danke für die hilfreiche Antwort kneitzel
public static int[] verschiebe(int[] zahlen, int schrittweite) {
// Schritt 1: Erstellen eines neuen Arrays mit der gleichen Länge
// Schritt 2: Füllen des Arrays mit einem Offset (Schrittweite) - Schleife/System.arraycopy(falls schon behandelt?)
// Tipp: Damit der Index auch innerhalb der Grenzen des Arrays bleibt also [0, zahlen.length[ benötigt man den Modulo-Operator (%)
// Schritt 3: Zurückgeben des Arrays
}
Wenn ich dich richtig verstehe, dann bist du nur durch die Rückgabe eines Arrays verwirrt?
Eine Funktion ist vom Prinzip her immer gleich aufgebaut (Jetzt vereinfacht! Es ist noch nicht umfassend!):
<Sichtbarkeit> <Type> <Name> (<Parameter> {, <Parameter>})
Mit <Parameter> := <Type> <Name>
<Type> kann dabei sehr viel sein:
- einer der Basistypen
- ein Array
- eine Klasse
Bei dem Rückgabetyp ist auch noch void zugelassen, das für keine Rückgabe steht.
Ein Array kann selbst auch wieder beliebige Typen haben. Also z.B. int[] oder MeineKlasse[].
Wenn die Funktion einen Rückgabetyp definiert, der nicht void ist, dann muss immer genau so ein Wert zurück gegeben werden. Das könnte man evtl. durch so einen Code zeigen:
Code:
<Type> someFunction()
{
<Type> result;
// result muss hier irgend einen Wert bekommen.
return result;
}
Konkret könnte da also jetzt <Type> ein int[] sein:
Code:
int[] someFunction()
{
int[] result;
// result muss hier irgend einen Wert bekommen.
return result;
}
Wie Du das gewünschte Ergebnis erstellst musst Du natürlich statt des Kommentars schreiben. Dabei hast Du dann zur Verfügung:
- ggf die Parameter, die übergeben wurden.
- die Instanz der Klasse (this) mit allen Inhalten, so die Funktion nicht statisch ist.
- Klassen, die bekannt sind.
Ein Array ist nur eine Liste.
Du kennst ja schon double und float Arrays, beide Arrays sind einfach Listen vom primitiven Datentypen (double, float). Eine Liste kann jedoch von jedem Datentyp bzw. Objekt gebildet werden.
Hier mal zum Verständnis, schau dir die Deklarierung an und die Gemeinsamkeiten.
Java:
int size = 10;
double[] doubleArray = new double[size];
float[] floatArray = new float[size];
int[] intArray = new int[size];
Auto[] autoArray = new Auto[size];
for(int index = 0; index < size; index++) {
System.out.println(beliebigesArray[index]);
}
Alle Listen haben die selbe Größe und werden ähnlich deklariert.
Ein Array kann man mithilfe einer Schleife durchlaufen werden.
In diesem Fall ist es nur eine einfache Ausgabe.
Zuweisungen eines Arrays geschehen, am Beispiel eines intArrays, wie folgt:
Java:
intArray[index] = 10;
Wenn du nun zwei Arrays hast und die Werte von dem einen ins andere übertragen willst musst du auf das Element des einen zugreifen und es dem anderem zuweisen. (eine Kombination aus dem gezeigten).
public static int[] verschiebe(int[] zahlen, int schrittweite) {
// Schritt 1: Erstellen eines neuen Arrays mit der gleichen Länge
int[] verschobeneZahlen = new int[zahlen.length];
// Schritt 2: Füllen des Arrays mit einem Offset (Schrittweite) - Schleife/System.arraycopy(falls schon behandelt?)
// Tipp: Damit der Index auch innerhalb der Grenzen des Arrays bleibt also [0, zahlen.length[ benötigt man den Modulo-Operator (%)
// Schritt 3: Zurückgeben des Arrays
return verschobeneZahlen;
}
Und jetzt noch der fehlende Teil, die ominöse Schleife:
Code:
public static int[] verschiebe(int[] zahlen, int schrittweite) {
// Schritt 1: Erstellen eines neuen Arrays mit der gleichen Länge
int[] verschobeneZahlen = new int[zahlen.length];
// Schritt 2: Füllen des Arrays mit einem Offset (Schrittweite) - Schleife/System.arraycopy(falls schon behandelt?)
for (int i=0; i<zahlen.length; i++) {
if (i < zahlen.length-schrittweite) {
verschobeneZahlen[i+schrittweite] = zahlen[i];
} else {
verschobeneZahlen[i+schrittweite-zahlen.length] = zahlen[i];
}
}
return verschobeneZahlen;
}
Ok, wieder schrittweise. Erster Schritt: die Idee.
Um das ganze für Anfänger anschaulich zu machen würde ich die Zahl zunächst mal in einen String umwandeln und dann mit contains gucken ob eine gerade Zahl drinnen ist Und das Ergebnis von contains gleich returnen negiert natürlich). Damit ist die Vorgabe dass kein if drin sein darf erfüllt.
Erstmal vielen dank für die Hilfreichen Posts ihr seid genial! Nur uns wurde manches garnicht beigebracht was ihr hier so geschrieben habt, sprich: Schritt 2: Füllen des Arrays mit einem Offset (Schrittweite) - Schleife/System.arraycopy(falls schon behandelt?) - offset und arraycopy kenne ich leider nicht. bei nr 3 würde ich das ganze mit einer schleife machen aber da steht dass man es ohne machen soll..
Das mit offset ujnd arraycopy hatte Joose mal als Kommentar reingeschrieben. Siehst du das in meiner Umsetzung ? Ich denke mal da werden nur Dinge benutzt die du kennst (kennen musst !)
ich habe mich hier erst gestern registriert, weil ich Schwierigkeiten habe im Fach programmieren. Könnt ihr es iwie ausgiebig erklären sodass ich alles verstehe ? Wie ich bereits gesagt habe bin ich ein Anfänger deswegen fällt mir so einiges schwwer also was das Thema verstehen angeht und ich würde gerne mit eurer Hilfe dazulernen. Ich habe meinen Skript gelesen mir sehr viele JAVA tutorials reingezogen.
Was ich bereits kann ist:
variablen deklarieren, IF und FOR Schleifen, switch und case, methoden aufrufen, Arrays deklarieren, Werte Ausgeben und modulo..
Also die Klasse String müsstest du aber kennen, das kommt ja schliesslich schon in der Aufgabenstellung vor und es wird ja auch mindestens eine Methode dieser Klasse in der Aufgabenstellung benutzt. (substr()).
Falls nicht würde ich mir diese Klasse mal angucken. z.B. hier: http://openbook.rheinwerk-verlag.de...04_001.htm#mj71fbc84ad33a281b9352b0b19fae2fb2
Dort steht dann auch wie du primitive Datentypen wie int in einen String umwandelst.
Also da kann man sich auch überlegen, was für Alternativen es gibt. Erst einmal macht diese Aufgabe so in meinen Augen sehr wenig Sinn. Daher frage ich mich, was da denn getestet oder geprüft werden soll.
Also Schleifen lassen sich oft ersetzen durch Rekursion.
If Anweisungen lassen sich nicht so ohne weiteres ersetzen - außer eben der ? : Operation.
Null ist laut Definition gerade^^ da muss man nicht fragen
Finde den Ansatz aber mau... feste Werte in einer dynamischen Methode.
Glaube ein rekursiver Ansatz, bzw. der Lösungssatz: "Lieber Professor, stellen sie doch mal bitte ein paar realitätsnahe Aufgaben". wäre deutlich besser.
"Ohne Schleifen" in der Schule oder Uni weißt in Aufgaben meist auf Rekursion hin.
Die Frage ist nur... zählt ein return BOOLSCHER AUSDRUCK als nicht If-Anweisung... wenn ja... Professor mal wieder einen Tritt geben...
EDIT:
Man könnte einfach alle Werte des Arrays zusammenzählen und dann gucken ob es durch 2 Teilbar ist. Und das mit der Rekursion.
IMHO nicht, allenfalls als sehr enge Spezialisierung einer if-Anweisung ... ist dann aber wohl mehr eine Spitzfindigkeit, da die Wirkungsweise ähnlich ist !
Aber rein "rechtlich" gesehen sicher nicht ...
Okay nochmal zum Verständnis... gehen wir jetzt davon aus das eine Ziffernfolge kommt und die soll analysiert werden? also z.B.: 123 und in der sind 2 ungerade Zahlen? Oder soll geprüft werden ob ein Array nur ungerade Elemente enthält?
Die Aufgabe ist eindeutig:
Aufgabe 3) 12 Punkte
Schreiben Sie eine Methode public static boolean hatUngeradeZiffern(int zahl) die nur
dann true liefert wenn alle Ziffern ungerade sind. Ohne Schleifen und if-Anweisungen.
Und da steht nichts von positiven oder negativen zahlen.
(number < 10 && number > -10) ist die Abbruchbedingung der Rekursion. Wenn das wahr ist, dann haben wir nur noch eine Ziffer und die wird geprüft. number%2 != 0 ist true, wenn die Zahl ungerade ist.
Und wenn die Zahl mehr wie eine Ziffer hat, dann muss ich die Zahl/10 testen (das sind die übrigen Ziffern) und die letzte Ziffer. Die letzte Ziffer wäre (Zahl%10) was ich %2 prüfen müsste. Aber x %10 %2 ist das Gleiche wie x % 2, daher habe ich das %10 weglassen können.
Naja, er hat die Aufgabenstellung aus den Augen verloren. Bei so langen Threads ja kein Wunder und auch kein Problem. Ist ja einfach zu lösen und dann kann man wieder an einem Strang ziehen.
Ich habe die ganze Zeit schon an deinem Strang gezogen. Ich wollte ja nur wissen was dieses intArray sein soll weil seine Lösung ja nicht kompiliert hat und ich sie ausprobieren wollte. Und die rekursive Lösung gefällt mir ja auch gut obwohl ich mir nicht sicher bin ob die hier gemeint war. Das müsste der TE entscheiden.