schleife mit einem Returnwert

youngcut

Mitglied
Java:
public class ShiftAll {

	/**
	 * @param args
	 * Schreiben Sie ein Programm ShiftAll, das einen Text 
	 * über die Tastatur einliest und dann immer wieder zyklisch 
	 * nach rechts verschoben auf den Bildschirm ausgibt, 
	 * bis der eingegebene Text wieder erscheint.
	 */
	
	public static String shiftright(String x){
		
		return       	
        x.length()==0 ? x :
		x.substring(x.length()-1) + x.substring(0,x.length()-1);
        }


	public static void main(String[] args) {
		
		String text = "Dieser Text wird nach recht verschoben";
		System.out.println(text);
		System.out.println(shiftright(text));


        
	}
}

Hey leute kann mir hierbei jemand helfen?

wie bekomme ich es hin das jedes mal eine ziffer mehr verschoben wird
bis es einmal komplett rum ist.

MFG
 
Java:
    public static String shiftright(String x){
        
        return          
        x.length()==0 ? x :
        x.substring(x.length()-1) + x.substring(0,x.length()-1);
        }

Durch das return wird hier nie etwas ausgeführt

Und was heisst bis es einmal rum ist?

Ohne schlaufen geht gar nichts, lies mal etwas ueber FOR Schleifen
 
wenn man dies jetzt ausführt wird der letzte buchstabe des textes, so z.z. einmal nach rechts verschoben und landet ganz links vom text

quasi: Dieser Text wird nach recht verschoben -> nDieser Text wird nach recht verschobe

und das soll jedes mal ein Buchstabe mehr verschoben werden bis der satz wieder so: Dieser Text wird nach recht verschoben
da steht
 
Ist das eine Hausaufgabe?

gib mal bei google java + for schleife ein

Java:
         for (int i=0; i<laenge+1; i++) {
        	System.out.println(text);
        	text = (shiftright(text));
        }

Weisst du warum das mit dem return geht?

🙂 sogar ich habs begriffen🙂
 
Zuletzt bearbeitet:
wenn ich dich wäre würde ich gaaaanz unten beginnen...

Hatte heute einen guten Tag, gib das deinem Lehrer so ab:

Java:
public class ShiftAll {
 
    /**
     * @param args
     * Schreiben Sie ein Programm ShiftAll, das einen Text 
     * über die Tastatur einliest und dann immer wieder zyklisch 
     * nach rechts verschoben auf den Bildschirm ausgibt, 
     * bis der eingegebene Text wieder erscheint.
     */
    
    public static String shiftright(String x){
        
        return          
        x.length()==0 ? x :
        x.substring(x.length()-1) + x.substring(0,x.length()-1);
        }
 
 
    public static void main(String[] args) {
        
        String text = "Dieser Text wird nach recht verschoben";
        
        int laenge = text.length();
        
        for (int i=0; i<laenge+1; i++) {
        	System.out.println(text);
        	text = (shiftright(text));
        }
    }
}
 
Java:
    public static String shiftright(String x){
        
        return          
        x.length()==0 ? x :
        x.substring(x.length()-1) + x.substring(0,x.length()-1);
        }

Durch das return wird hier nie etwas ausgeführt

Räusper - natürlich wird etwas ausgeführt - die Zeilenumbrüche sind Java sowas von egal und das ; steht ganz unten und nicht nach dem return ....

Aber ich sag ja immer die ?: Notation ist nahezu unleserlich

Erst mal etwas anders einrücken, vielleicht machts dann klick ;-)

Java:
	public static String shiftright(String x){
		return x.length()==0 ? x : x.substring(x.length()-1) + x.substring(0,x.length()-1);
	}

und wenn ich mich nicht vertippt habe, macht das da genau dasselbe, ist aber eben einfacher zu verstehen

Java:
	public static String shiftright(String x){
		if (x.length()==0) {
			return x;
		} else {
			return x.substring(x.length()-1) + x.substring(0,x.length()-1);
		}
	}
 
Zuletzt bearbeitet:
Aber ich sag ja immer die ?: Notation ist nahezu unleserlich
Natürlich ist sie leserlich, aber man macht keine Statements, welche länger als eine Zeile (meist 80 chars) sind und gebrochen werden müssen. Aber das versuch ich auch sonst immer zu vermeiden, nicht nur beim ternären Operator.

[...] macht das da genau dasselbe, ist aber eben einfacher zu verstehen

Aber bitte bitte bitte mit Klammern! Man schreibt doch keine Blocks ohne Klammern :noe:
 
Natürlich ist sie leserlich, aber man macht keine Statements, welche länger als eine Zeile (meist 80 chars) sind und gebrochen werden müssen. Aber das versuch ich auch sonst immer zu vermeiden, nicht nur beim ternären Operator.
Das ist wohl ein Religionskrieg, aber so oft wie die nicht verstanden wird, gehört sie verboten äh na ja ich korrigiere mal: vermieden. Genau so wie Variablen mit nur einem Buchstaben oder doppelte Namen oder so.
Ich kenne keinen eizigen Fall in dem diese Notation eingesetzt werden muss - ich habe noch immer eine andere Lösung gefunden.

80 Zeichen? Na ja, da muss ich aber im Code nicht weit suchen bis ich auf der 5. Einrückebene bin und das sind bei mir schon 20 Charakter (ich kenne welche die haben den Tab immer noch auf 8 eingestellt) ... die Zeiten der 80 Zeichen Begrenzung sind wohl schon länger vorbei wenn man mit sprechenden Namen arbeiten will

Das ist so eine Zeile - da stehen 6 Tabs vorne dran und dann folgen einige chars - tja
ob Umbrechen leserlicher ist? Ich finde nein, mein Monitor ist breit genug ;-)
(Ich würde übrigens sogar
Code:
1.0*size
als
Code:
1.0 * size
schreiben und 1.0 ist hier sowieso Pflicht wenn es sich nicht um int-Ausdrücke handelt.

Java:
						diffPercentage = ((1.0*size - mediumPictureSize) / mediumPictureSize) * 100;


Aber bitte bitte bitte mit Klammern! Man schreibt doch keine Blocks ohne Klammern :noe:
Welche Klammern vermisst du 😛feif:

(Ich gebe zu, dass ich da manchmal schluddrig bin - bei Einzeilern lass ich die Klammern schon mal weg)
 
Das ist wohl ein Religionskrieg, aber so oft wie die nicht verstanden wird, gehört sie verboten äh na ja ich korrigiere mal: vermieden. Genau so wie Variablen mit nur einem Buchstaben oder doppelte Namen oder so.
Das sind doch völlig unterschiedliche Sachen. Wenn du noch nie eine [c]while[/c]-Schleife verwendet hast, dann weisst du auch nicht, wie diese funktioniert. Aber jeder, der den ternären Operator schon verwendete, weiss wies geht. Und wer mit diesem Operator irgendwelche Verschachtelungen in einer Zeile implementiert, der macht das auch mit einem "normalen" if/else. So oder so unschön 🙂
Ich kenne keinen eizigen Fall in dem diese Notation eingesetzt werden muss - ich habe noch immer eine andere Lösung gefunden.
Natürlich. Nehmen wir als Beispiel, dass ich eine leere Liste als [c]null[/c] zurückgeben will. Mit ternärem Operator:
Java:
public static <T> Collection<T> doSth(Collection<T> c) {
    return c.isEmpty() ? null : c;
}
Mit dem if:
Java:
public static <T> Collection<T> doSth(Collection<T> c) {
    if (c.isEmpty()) {
        return null;
    }
    return c;
}
Ersteres gefällt mir besser.

80 Zeichen? Na ja, da muss ich aber im Code nicht weit suchen bis ich auf der 5. Einrückebene bin und das sind bei mir schon 20 Charakter (ich kenne welche die haben den Tab immer noch auf 8 eingestellt) ... die Zeiten der 80 Zeichen Begrenzung sind wohl schon länger vorbei wenn man mit sprechenden Namen arbeiten will
Bei der Arbeit haben wir 110, aber normalerweise komm ich auch mit 80 gut aus. Wenn du allerdings ein Verschachtelungslevel von 5 erreicht hast, hast du eindeutig eine zu hohe Komplexität! Es gibt da ein Statement (in einem Buch, von einem bekannten Programmierer?), das aussagt, es darf nie mehr als eine Verschachtelung und 5 Zeilen Code pro Methode geben. Find ich übertrieben, aber in diese Richtung sollte man denken.

Das ist so eine Zeile - da stehen 6 Tabs vorne dran [...]
IMHO fail. Aber eben, meine Meinung.
[...] und dann folgen einige chars - tja
ob Umbrechen leserlicher ist? Ich finde nein, mein Monitor ist breit genug ;-)
(Ich würde übrigens sogar
Code:
1.0*size
als
Code:
1.0 * size
schreiben und 1.0 ist hier sowieso Pflicht wenn es sich nicht um int-Ausdrücke handelt.

Java:
						diffPercentage = ((1.0*size - mediumPictureSize) / mediumPictureSize) * 100;
Ja, bei Formeln wirds immer etwas länger, aber sonst?
 

Neue Themen


Zurück
Oben