Flaggenaufgabe, für mich zu schwierig

Status
Nicht offen für weitere Antworten.

noobinjava

Mitglied
Hallo,

ich habe wieder eine tolle aufgabe bekommen, wo ich verschiedene Flaggenformationen
ausgeben soll. der code ist bis zu einem gewissen grad vorgegeben, aber ich habe
keine ahnung wie das gemacht werden soll. for, if, while schleifen sind erlaubt:

Java:
  123456789 
1 1.......1 
2 .0.....0. 
3 ..1...1.. 
4 ...0.0... 
5 ....1.... 
6 ...0.0...
7 ..1...1.. 
8 .0.....0. 
9 1.......1

so soll die flagge aussehen. es müssen noch weitere flaggen ausgegeben werden,
aber ich will erst mal das hier verstehen. hier ist der code, der kompletiert werden soll:

Java:
public class Miniprojekt2 {
public static String flagge1(int groesse) {
// Großes X, Zeilen 1 und 0
// der Parameter groesse ist stets ungerade und <= 9
String m = "";
// hier die Lösung implementieren
return m;
}

public static void main(String[] args) {
// Testausgaben
System.out.println(flagge1(5));
System.out.println(flagge1(7));
System.out.println(flagge1(9));

}
}

ich bin für jeden vorschlag dankbar.

grüße
 
fange bitte mit etwas einfacherem an:
*
**
***
****
*****
******

kennst du for-Schleifen?

for int i=0;i < 6; i++
führt zu Durchgängen mit i = 0, 1, 2, 3, 4, 5
könnte das nicht beim Zeichnen helfen?
 
Ein kleiner Trick für den 0-1 Wechsel: Definiere eine Variable int v = 1; und wechsle bei jedem Schleifendurchlauf mit v = 1 - v;
 
"intelligenter" wäre vermutlich folgendes:
Java:
for (int i=0; i<7; i++) {
	for (int k=0; k<i; k++)
		System.out.print("*");
	System.out.println();
}

Prinzipiell geht es darum Gesetzmässigkeiten zu erkennen und diese dann in Schleifen umzusetzen
Im Fall der Flagge oben wandern die Zahlen in jeder Zeile um eine Position nach innen - bis sie sich "treffen". Danach wandern sie wieder nach aussen bis sie ganz aussen angekommen sind. Gleichzeitig wechselt die Zahl immer zwischen 0 und 1 (s. Post von Landei)
Eine Möglichkeit wäre also eine Schleife, welche die Zahlen nach innen "laufen" lässt und anschliessend eine zweite Schleife, welche die Zahlen nach aussen laufen lässt.
 
@noobinjava
hmm, ganz ordentlich, leider eher nicht die Richtung der weiteren Aufgaben 😉
wobei auch das halbwegs möglich wäre,
als nächstes käme

*
**
***
****
*****
******
*****
****
***
**
*

also mit einem if prüfen, ob du in der zweiten Hälfte bist und dann von m wieder Sterne wegnehmen
usw.

---------

sauberer könnte aber grundsätzlich ein anderer Gedanke sein, gerade bei dem was noch alles kommt,
(edit: von Michael... schon erwähnt)
baue keinen String m auf, sondern male jede Zeile quasi komplett neu,
wenn du bei i = 6 angelangt bist,
dann verwende z.B. eine innere Schleife wie ich hier ausnahmsweise verrate:
Java:
        int n = 7;
        String m = "";
        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                System.out.print("*");
            }
            System.out.println();
        }

so, nun gilt immer noch, als nächsten Schritt

*
**
***
****
*****
******
*****
****
***
**
*
hinzubekommen,
die Grenze für die innere Schleife ist dann nicht genau i, sondern ein aus i berechneter Wert,
abhängig von der Gesamtzahl der Zeilen n

falls das klappt als nächstes in jeder Zeile am Ende die Zahl 0 oder 1 dazu,

danach zusätzlich
*******
*****
***
*
was auch wieder durch eine Schleife geht

---------

oder, vielleicht noch ein ganz anderer Weg:
immer eine Doppelschleife verwenden
for i bis n,
darin j bis n
damit ein Quadrat malen
*******
*******
*******
*******
*******
*******
*******

und dann nur die Positionen berechnen, an denen eine Zahl statt eines Punktes stehen muss,
abhängig von i, j und n

--------

so, vieles zur Auswahl, erstmal für ein Verfahren entscheiden 😉
 
*
**
***
****
*****
******
*****
****
***
**
*

das klappt leider nicht mit diesem Code. Warum nicht?

[Java]
public class flaggenübung {
public static void main(String [] args){

String m = "";

for (int i =1; i <= 6; i++){
System.out.println ( m+="*");
}
m = "*****";
for (int i = 7; i <=11; i++) {
System.out.println( m -= "*");

}
}
}
[/Java]
 
ich würde ganz anders an das problem heran gehen. wie gesagt zwei schleifen..
1. das machen, ganz einfach oder?
.........
.........
.........
.........
.........
.........
.........
.........
.........

dann das machen, ganz leicht, na wann kommt die 1 hin statt dem . ?

1........
.1.......
..1......
...1.....
....1....
.....1...
......1..
.......1.
........1

3. das nicht ganz so leicht aber auch leicht raus zu finden wann jetzt die 1 zusätzlich kommt
1.......1
.1.....1.
..1...1..
...1.1...
....1....
...1.1...
..1...1..
.1.....1.
1.......1
und nun.. wann kommt da eine 0 statt 1?
das sag ich dir:
i/2 rest ==0
-> if(i%2==0)

1.......1
.0.....0.
..1...1..
...0.0...
....1....
...0.0...
..1...1..
.0.....0.
1.......1

Also wir sehen ihr wirklich oft schlechte aufgabenstellungen von Lehrern, aber diese finde ich wieder mal echt gut ;-)
 
Ich habe es leider nicht geschafft, dies darzustellen:
.........
.........
.........
.........
.........
.........
.........
.........
.........

Wir müssen nämlich mit dieser Vorgabe coden:

[Java]public class Miniprojekt2 {
public static String flagge1(int groesse) {
// Großes X, Zeilen 1 und 0
// der Parameter groesse ist stets ungerade und <= 9
String m = "";
// hier die Lösung implementieren
return m;
}

public static void main(String[] args) {
// Testausgaben
System.out.println(flagge1(5));
System.out.println(flagge1(7));
System.out.println(flagge1(9)); [/Java]
 
mit zwei Schleifen.. hilft der tipp nicht? Brauchst du die Lösung?

Java:
	public static String flagge1(int groesse) {
		// Großes X, Zeilen 1 und 0
		// der Parameter groesse ist stets ungerade und <= 9
		String m = "";
		// hier die Lösung implementieren

		for(int i = 0; i< groesse; i++){
			for(int j = 0; j < groesse; j++){
				m += ".";
			}
			m+="\n";			
		}
		return m;
	}
so in etwa...

Schaffst du mit dem das 2. von mir?
 
Zuletzt bearbeitet:
Hallo,

ich habe versucht, direkt
1.......1
.0.....0.
..1...1..
...0.0...
....1....
...0.0...
..1...1..
.0.....0.
1.......1

hinzukriegen, aber wieder mal vergebens:




Java:
public static String flagge1(int groesse) {
        // Großes X, Zeilen 1 und 0
        // der Parameter groesse ist stets ungerade und <= 9
        String m = "";
        int a;
        for(int i = 0; i< groesse; i++){
        	for(int j = 0; j < groesse; j++){
        		if (i%2 ==0){ for (j=2; j<groesse; j = j+2 )
        		for (j = groesse -1; j <groesse; j = j -2)
        		{ a = 1; }
        		}
                m += ".";
        	}
            m+="\n";            
        }
        return m;
	}
	
	public static void main(String[] args) {
		// Testausgaben
		System.out.println(flagge1(5));
		System.out.println(flagge1(7));
		System.out.println(flagge1(9));
	}}


Könntest du bitte dann die Lösung präsentieren, ich kriegs leider nicht
gebacken.

Danke
 
mach doch sinnvolle Klammern!

Java:
if (i%2 ==0){ for (j=2; j<groesse; j = j+2 )
                for (j = groesse -1; j <groesse; j = j -2)
                { a = 1; }
wer soll denn das lesen können?
warum machst du drei schleifen? willst du einen Würfle darstellen?

willst du die Lösung?
 
viel spaß noch ;-)
Java:
	public static String flagge1(int groesse) {
		String result = new String();
		for(int i = 0; i< groesse; i++){
			for(int j = 0; j < groesse; j++){
				if(j==i ||  groesse-i-1 ==j){
					if(i%2==0){
						result+="1";
					}else{
						result+="0";						
					}
				}else{
					result+=".";					
				}
			}
			result+="\n";
		}
		return result;
	}
 
ARadauer, wenn du so eine Lösung postest, dann erlaub dir doch wenigstens den Spaß, das ganze möglichst lustig hinzuschreiben, dann hat der Mensch wenigstens was zum puzzeln 😀
Java:
import static java.lang.System.*;
import static java.lang.Math.*;

public class Flaggen {
	
	private static interface Flagge{
		char getChar(int x, int y, int w, int h);
	}
	
	public static void draw(Flagge f, int w, int h){
		for(int x=0; x<w; x++){
			for(int y=0; y<h; y++){
				out.print(f.getChar(x,y,w,h));
			}
			out.println();
		}
	}
	
	public static void main(String..._){
		draw(new Flagge(){
			@Override public char getChar(int x, int y, int w, int h){
				return abs(x-w/2)==abs(y-h/2)?(x-w/2+1)%2==0?'0':'1':'.';
			}
		}, 19,19);
	}
}
Ich find die doppelten Doppelpunkte soo toll^^ :lol:
 
stimmt, danke nochmal wegen der lösung, das problem ist nur, dass die aufgabe
mittels der vorgaben gelöst werden sollte, also mit "String m = "";" etc. hier ist
es nochmal:

Java:
public class Miniprojekt2 {
public static String flagge1(int groesse) {
// Großes X, Zeilen 1 und 0
// der Parameter groesse ist stets ungerade und <= 9
String m = "";
// hier die Lösung implementieren
return m;
}
 
public static void main(String[] args) {
// Testausgaben
System.out.println(flagge1(5));
System.out.println(flagge1(7));
System.out.println(flagge1(9));

kannst du das auch auf diese weise lösen?
 
tatsächlich, ich habe das "new String ()" mit "" ersetzt und es funktioniert trotzdem.
wie gesagt, ich bin ein noob in java, ich nichts verstehen.
 
zumindest schreibst du "" statt new String(), damit bist du quasi besser als ARadauer 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben