Pyramide-Muster in Java
War es so schwer zu Fragen, wie eine newbie-Frage auf dieser erweiterte Website. Aber nach so viel versucht und sogar zu verlieren, meine Hoffnung war ich gezwungen meine selbst hier. Ich bin nicht in der Lage, drucken Sie das folgende Muster:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
Aber mit meinem ermüdenden Anstrengungen erreichte ich die folgenden:
public static void main(String[] args) {
int num = 1;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15 - i; j++) {
System.out.print(" ");
}
for (int k = 0; k <= i; k++) {
System.out.print(num + " ");
}
System.out.println();
}
}
1
1 1
1 1 1
1 1 1 1
1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
- Sie erkennen, dass Sie sich nie ändern
num
, richtig? - Sie müssen aktualisieren Sie num, und verfolgen, wo Sie sind in der Linie. wenn notyetinhalf, num+=1; else Zahl= 1;
- Sie machen
i++
obwohl Sie brauchen, line Längen von 1,3,5,7... - alle Nummern Ihrer Pyramide sind Potenzen von 2... denken, wie man den Exponenten entsprechend Ihrer position in der jeweiligen Zeile! es ist nicht so schwer zu erreichen...
- Jetzt verstehe ich. Ich werde es versuchen und werden wieder dabei sein.
- Für mich sollten Sie daran erinnern, Letzte Zeile (in der Reihe???), erstellen aktuelle Zeile (size +1) und wiederholen Sie Schritt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ya gehen
Erklärung
int padLength = (int) Math.ceil(Math.log10(Math.pow(2, max) + 1)) + 2;
Math.pow(2,max)
- Gibt mir der maximalen Anzahl werde ich AnzeigeMath.ceil(Math.log10(number + 1))
- Ich benutze diese, um zu bestimmen, die Länge der string-Darstellung von spezifischennumber
. Bitte beziehen Sie sich auf wikipedia zu überprüfen, was der Logarithmus ist. Füge ich 1 zu überspringen Grenzfall, wenn die Anzahl ist genau die Leistung von z.B. 10log10(10)->1
(dies wird nie eintreten, die im task angegeben, in Frage, es ist nur für die Reinheit der Lösung). Ceil nur Runden Zahl.+2
- minimaler Abstand zwischen zwei zahlen angegeben Beispiel wurde um 2 Felder lang, so dass ich nur hinzufügen, dass dieseKönnten Sie hier
Integer.toString(((int)Math.pow(2, max))).length()+2
aber es ist nicht so schön 🙂return String.format("%-" + l + "s", s);
Erste, die ich Baue, format-string, der aussieht wie z.B.
%-3s
, was bedeutet, printString
mit Mindestlänge von 3, Polsterung auf der rechten Seite. Zweite argument ist die Zeichenfolge, ich will drucken. Finden Sie DokumentationBeispiel
Find ich die anderen Antworten sehr überwältigend und dramatisch. Sie brauchen nicht viel, Mathematik und Komplexität um dieses problem zu lösen. Das ist vielleicht nicht der beste code, aber ich denke, es ist einfach zu verstehen. Nicht noch eine Erklärung erforderlich ist, wird eine Zeile für Zeile Vorgehen, Es ist gut, Dinge einfach zu halten.
Ausgabe: