myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Hilfe bei zwei Java-Aufgäbchen (Schleifen, Arrays) (https://mygully.com/showthread.php?t=2796013)

mona_lisa 04.01.13 19:05

Hilfe bei zwei Java-Aufgäbchen (Schleifen, Arrays)
 
Hallo liebe Programmierer,

ich habe nun in der Weihnachtszeit einen ganzen Haufen Übungsaufgaben aus meinem Programmierkurs abgearbeitet. Alles mehr oder weniger simple Aufgaben rund um bedingte Anweisungen, Schleifen und Arrays.
Bei zweien fällt mir leider GAR NICHTS ein, wie die zu lösen sein könnten.
Daher frage ich euch mal kurzerhand um Rat.

Das erste Übel:
Zitat:

Schreiben Sie in der Klasse blubbs eine Methode blablabla(), welche in einer Schleife die Zahlen von 1 bis 10 durchläuft und danach wieder bis 1 rückwärts läuft.
Die Zahlen sollen, nebeneinander durch Komma getrennt ausgegeben werden.
Vermeiden Sie dabei den eventuell auftretenden Schönheitsfehler, dass hinter der letzten oder vor der ersten Zahl noch ein Komma steht.
Die Ausgabe sähe etwa so aus: 1, 2, 3, . . . , 10, 9, 8, . . . 2, 1
Bedingung: Es darf nur eine Schleife benutzt werden.
Meine Lösung, die jedoch zwei Schleifen enthält und die den "Schönheitsfehler" vielleicht auch nicht auf besonders elegante Weise vermeidet:
Code:

public void zahlenAusgabeV1()
    {
        for(int i = 1; i<=10; i++)
        {
            System.out.print(i + ", ");
            if(i==10)
            {
                for(int j = 9; j>1; j--)
                {
                    System.out.print(j + ", ");
                }
            }
        }
        System.out.print(1);
    }

Was schlagt ihr vor?


Und das andere Übel:
Zitat:

Erstellen Sie eine Methode blablabla(), welche alle im Array gespeicherten Zahlen mit einem Faktor multipliziert, der so gewählt wird, dass danach die Summe der Elemente den Wert 1 ergibt.
Da fällt mir rein gar nichts ein. Ich hab z.B. ein Array
double[] zahlen = {5, 9, 42, 666, 0};
Ich weiß vom mathematisch her gar nicht, wie das gehen soll :(

germgerm 04.01.13 20:43

@uebel_1

PHP-Code:

    int x 1;
    
int iIncr = +1;
    
    while(
x>0)
    {            
        
System.out.print(x);            
        
        
+= iIncr;
        
        if (
x>0)            
            
System.out.print(", ");
        
        if (
x>9)
        {
//            x = 10;
              
iIncr = -1;
        }    
    } 


germgerm 04.01.13 20:45

@uebel_2

Die erste Zahl x ungleich Null multipiziere mit 1/x. Alle anderen Zahlen multipliziere mit 0.

spartan-b292 04.01.13 20:56

Vorher sollte man noch prüfen ob die 1. Zahl nicht 0 ist.

germgerm 04.01.13 21:02

Zitat:

Zitat von spartan-b292 (Beitrag 24168294)
Vorher sollte man noch prüfen ob die 1. Zahl nicht 0 ist.

Deswegen steht auch "die erste Zahl x ungleich Null" (Null=0).

spartan-b292 04.01.13 21:05

Sorry. Das hab ich übersehn.

germgerm 04.01.13 21:08

@uebel_2.2

Du könntest auch jede Zahl xn ungleich Null mit

k = 1/(xn * zahlen.length)

multiplizieren.


EDIT: Funktioniert nur ohne Nullen bzw eigenes length ohne Nullen berechnen.

mona_lisa 04.01.13 21:12

Vielen Dank schonmal :)

@uebel_1 :D
Warum schreibst du ein '+' bei 'int iIncr = +1'
Hat das eine Bedeutung? Also z.B. 'x+=1' heißt 'x=x+1' ...das ist mir klar. Aber x=+1 ???
Ich hab den Code jetzt nicht gestestet, bin ihn nur mal mit meinem Super-Hirn durchgegangen und was ich nicht verstehe:
die zweite if-Anweisung wird doch auf jeden Fall true beim ersten Durchlauf. Und da sagst du x ist 10.
Dann prüft er wieder die Bedingung in der Schleife, x=10 ist >0 = true und dann macht er doch System.out.print(10);
Das führt doch nicht zum erwünschten Ausgabe auf der Konsole :confused:

Was die zweite Aufgabe betrifft schaue ich morgen nochmal hier rein. Kann mich nicht mehr konzentrieren. Freitag abends programmieren macht niemandem Spaß^^

germgerm 04.01.13 21:23

Zitat:

Zitat von mona_lisa (Beitrag 24168344)
Warum schreibst du ein '+' bei 'int iIncr = +1'
Hat das eine Bedeutung?

Das hat keine Bedeutung, soll nur den Gegensatz zu iIncr=-1 verdeutlichen.

Zitat:

die zweite if-Anweisung wird doch auf jeden Fall true. Und da sagst du x ist 10.
Dann prüft er wieder die Bedingung in der Schleife, 10 ist >0 = true und dann macht er doch System.out.print(10);
????
Das x=10 kannst du weglassen :)

Zitat:

Freitag abends programmieren macht niemandem Spaß^^
Wo du recht hast, hast du recht ...

mona_lisa 04.01.13 22:10

Das kann aber irgendwie immer noch nicht ganz korrekt funktionieren^^ (.... ODER?)
Ich gehe mal gedanklich durch:

x ist 1 und iIncr ist 1
Schleifenbedingung 1>0 ist erfüllt
Er druckt 1 aus
x=1 wird zu x=2
Er druckt ein Komma
iIncr=1 wird zu iIncr=-1
ENDE 1. Durchlauf

x ist 2 und iIncr ist -1
Schleifenbedingung 2>0 ist erfüllt
Er druckt 2
x=2 wird wieder zu x=1
Drucke Komma
iIncr=-1 bleibt iIncr=-1

Irgendwie geht das nicht ganz auf, oder?

Ist mir jedenfalls immer noch ein Rätsel, wie man das mit einer einzigen Schleife lösen soll :cry:
So, nun endgültig Schluss für heute >.<

germgerm 05.01.13 08:50

Zitat:

Zitat von mona_lisa (Beitrag 24168541)
Das kann aber irgendwie immer noch nicht ganz korrekt funktionieren^^ (.... ODER?)

Aber sicher doch, wieso probierst du es nicht einfach aus?

Zitat:

Ist mir jedenfalls immer noch ein Rätsel, wie man das mit einer einzigen Schleife lösen soll
Debugger!

ProgMaster 05.01.13 13:55

Probieren geht über studieren!

mona_lisa 06.01.13 15:23

Ja, da habt ihr schon recht... bloß ich will es gerne üben, möglichst ohne Debugger sowas zu entwerfen und zu verstehen weil ich in der Klausur auch nur Stift und Papier zur Verfügung hab^^
Sollte einem bei solchen simplen Aufgaben ja eigentlich auch nicht gerade überfordern, vorausgesetzt man schaut GENAU hin... was ich nicht gemacht hab^^
Zitat:

if (x>9)
{
iIncr = -1;
Zitat:

Zitat von mona_lisa (Beitrag 24168541)
x=1 wird zu x=2
iIncr=1 wird zu iIncr=-1 //...NEIN!

Danke nochmal germgerm :T

Das zweite Übel ist ja auch ganz einfach, hab da wohl zu kompliziert gedacht^^
Habs jetzt so gelöst:

...falls jemandem langweilig ist, kann er ja nochmal drüberschauen... lässt sich wahrscheinlich auch noch verschönern... bin aber zufrieden, es funktioniert jedenfalls :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.