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.
wann benutzt man eigentlich eine while-schleife und wann eine for-schleife?
2. Frage:
wir müssen in einer aufgabe nun von einer gegebenen zahl, alle int-Zahlen (von 1 bis 9999) ausgeben lassen, deren summe die gegebene zahl ergibt. (Quersumme)
aber....es funktioniert einfach nicht, obwohl die formeln alle richtig sein müssten!
Java:
public class Quersumme {
public static void main (String[]args){
//die eingegebene Zahl wird in der Kommandozeile eingelesen
int zahl = Integer.parseInt(args[0]);
//wenn die eingegebene Zahl zwischen 1 und 36 ist
if((zahl>0)&&(zahl<=36)){
int eineStelle;
int zweiStellen;
int dreiStellen;
int vierStellen;
int summe;
for (int i = 1; i <= 9999; i++){
eineStelle = (zahl%10);
zweiStellen = ((zahl/10)+(zahl%10));
dreiStellen = ((zahl/100)+(zahl/10%10)+(zahl%10));
vierStellen = ((zahl/1000)+(zahl/100%10)+(zahl/10%10)+(zahl%10));
summe = eineStelle + zweiStellen + dreiStellen + vierStellen;
if(summe == zahl){
System.out.println(summe);
}
}
}
}
}
zuerst einmal ist es zu empfehlen den Code einzurücken.
Das nichts ausgegeben wird liegt daran, das wenn die Zahl im Bereich zwischen ]0 und 36] liegt, du vergleichst ob zahl == summe, und weil das nie erfüllt ist wird auch nix ausgeben
das programm berechnet ja VORHER die summe...und wenn die summe mit der eingegebenen zahl übereinstimmt (summe entspricht zahl, summe == zahl), dann soll diese summe ausgegeben werden....
war schon richtig!
Aber deine Stellenberechnung ist falsch!
was sollen diese ganze additionen?
Benutzt du Eclipse oder ähnliches? Wenn ja, dann debuge es, dann siehst du gleich was falsch läuft!
Ich gehe davon aus das du dies zum lernen von Java machst, ansonsten sag bescheit und ich kann dir den fertigen Code geben!
nein ich benutze keine entwicklungsumgebung, wobei ich mich iwann mal in netbeans bzw. eclipse einarbeiten wollte.
die stellenberechnung ist falsch?
*überleg*...
ich...brauche die summe garnicht....weil ich ja schon alles addiert habe....dann....brauche ich eigentlich nur das hier, oder:
jepp, sieht gut aus!
Empfehle dir, falls du den aufbau einer java-source verstanden hast, dich demnächst mit eclipse, netbeans oder anderen Werkzeugen zu beschäftigen!
Und wenn du dann auch noch das debug-Werkzeug einsetzt wirst du besser vorankommen und hättest vor 2 Stunden schon die Lösung gehabt!
wir müssen ein programm für die Berechnung eines Schnittpunkts zweier Geraden, die jeweils durch 2 Punkte definiert werden, programmieren, doch der compiler zeigt mir immer wieder auf den "y_Schnittpunkt" aber ich weiß nicht was da falsch ist?
aber die 3.aufgabe ist echt schwer....
da soll man so einen teppich ausgeben......der aus lauter quadraten besteht....
bestimmt braucht man schleifen...
der besteht iwie aus ne vielzahl von quadraten, die jeweils so ein rautenmuster haben.
das blöde ist, dass da auf dem zettel nichtmal ein einziger ansatz steht...
ich verstehe halt nicht, wie man mit JAVA ein muster ausgeben kann..der auf der zeile und als spalte sich sozusagen vervielfacht.
ich denke mal..dass man erstmal einen Quadrat durch system.out.println´s definiert....und dieses...muss dann iwie durch ne schleife so oft wiederholt werden wie es halt mit der zahl in der kommandozeile angegeben wurde...
Ja, man muss sich das halt überlegen. Die Lösung ist eine Kombination aus
1) System.out.print()
2) System.out.println()
3) Schleife(n)
4) Hilfsvariablen, um herauszufinden ob du zB grad die obere Kante von einem Quadrat ausgeben musst, oder eine Seite usw.
also...ich habe es schonmal geschafft, die zeilen von dem Teppich zu erzeugen.
Java:
public class Teppich {
public static void main (String[]args){
int anzahl_kreuze = Integer.parseInt(args[0]);
int anzahl_quadrate = Integer.parseInt(args[1]);
for(int i = 1; i <= anzahl_quadrate; i++){
//Zeilen
System.out.println(". . . . . . .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
}
}
}
aber ich verstehe nicht, wie ich die Spalten hinbekomme...also sodass diese genau nebeneinander wiederholt werden, sodass nachher ein großes Quadrat entsteht...
ich habs versucht drunter nochmal dasselbe nur mit print´s hinzukopieren, aber da kommt nur chaos raus. und wenn ich es direkt daneben kopiere, gehen die quadrate ineinander.
Ich würde enfach ein char[][] Array in der Größe des Teppichs machen, dahinein alles fertig "malen", und erst ganz am Ende ausgeben. String zu char[] geht mit "meinString".toCharArray(); char[] zu String mit new String(myArray);
naja...das ist ja die schwierigkeit, dass man bei der kommandozeile NUR die anzahl der quadrate angeben kann für eine seite...
für 5, also 5 quadrate lengs und 5 quadrate hoch (für ein 5x5 quadrat)
aber das klappt ja auch nicht, dass ich für jede einzelne zahl ein bild hinmache....also für 2 die zwei quadrate nebeneinander, für 3 einfach 3 quadrate nebeneinander.....für 100 z.B. wird das ja schön mühselig 100 quadrate nebeneinander einzuzeichnen...
und wenn man versucht die seiten EINZELN zu definieren landen die wieder untereinander, statt nebeneinander...
Java:
public class Teppich {
public static void main (String[]args){
int anzahl_kreuze = Integer.parseInt(args[0]);
int anzahl_quadrate = Integer.parseInt(args[1]);
for(int i = 1; i <= anzahl_quadrate; i++){
System.out.println(". . . . . . .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
System.out.println(". .");
}
for(int k = 1; k <= (anzahl_quadrate*6); k++){
System.out.print(" .");
System.out.printf("%n");
}
for(int j = 1; j <= anzahl_quadrate; j++){
System.out.print(". . . . . . ");
}
}
}
Also hier mal meine Lösung, sie ist sicherlich nicht sonderlich schön, aber wenigstens mal etwas das funktioniert. Ohne Arrays o.ä. kommt man halt nicht drumrum die Logik und die Ausgabe in einem zu machen.
Java:
public class Quadrate {
public static void main(String[] args) {
int quadrate = Integer.parseInt(args[0]);
int kantenLaenge = 6;
/* Quadrat-Reihen: */
for (int r = 1; r <= quadrate; r++) {
/* Die obere Kante der Quadrate in dieser Reihe (Spalten) */
for (int i = 1; i <= quadrate; i++) {
for (int k = 1; k <= kantenLaenge; k++) {
System.out.print(".");
}
}
System.out.println(".");
/* Die vertikalen Kanten der Quadrate für diese Quadrat-Reihe */
for (int i = 1; i <= kantenLaenge / 2; i++) {
for (int j = 1; j <= quadrate; j++) {
System.out.print(".");
for (int k = 1; k <= kantenLaenge - 1; k++) {
System.out.print(" ");
}
if (j == quadrate) {
/*
* Die Quadrate in der letzten Spalte sind noch nicht
* durch eine rechtsseitige Kante abgeschlossen
*/
System.out.print(".");
}
}
System.out.println();
}
}
/* Die letzte Reihe ist unten noch nicht mit einer Kante abgeschlossen */
for (int i = 1; i <= quadrate; i++) {
for (int k = 1; k <= kantenLaenge; k++) {
System.out.print(".");
}
}
System.out.println(".");
}
}
naja...das ist ja die schwierigkeit, dass man bei der kommandozeile NUR die anzahl der quadrate angeben kann für eine seite...
für 5, also 5 quadrate lengs und 5 quadrate hoch (für ein 5x5 quadrat)
Und das bekommst du ehrlich nicht hin? Ersetze einfach in meiner Lösung jedes anzahlZeilen und anzahlSpalten durch anzahlQuadrate, und dann sollte es laufen.
es läuft, es sind nur die striche doppelt und unten fällt ein strich.
und das andere ist wohl zu klein XD
aber jetzt setzt setzt die aufgabe noch die krone drauf:
in jedem quadrate sind diese kreuze (#) und auch die muss man per kommandozeile anpassen. die anzahl der kreuze muss immer ungerade sein UND sie darf die form des quadrats nicht verändern.