Я пытаюсь создать горизонтальную линейку, как показано ниже:
Код, который у меня есть сейчас:
public class JavaRuler {
public static final int COUNT = 19;
public static void main(String[] args) {
Design();
Inches();
Number();
}
public static void Design() {
for (int j = 1; j <= COUNT * 2 + 2; j++) {
System.out.print("__");
}
System.out.println();
}
public static void Inches() {
for (int i = 1; i <= COUNT * 2 + 2; i++) {
System.out.print("'|");
}
System.out.println();
}
public static void Number() {
for (int k = 1; k <= COUNT; k++) {
System.out.print("___" + k);
}
}
}
Размер линейки должен быть изменен в дюймах, и если операторы не разрешены (только для циклов), мой текущий вывод действительно близок, но я не могу понять, как уменьшить «_» в третьей строке, когда числа выходят за пределы 9. Любые советы?
Дополнительное примечание: см. Соглашения об именах Java




Я думаю, что мой пример здесь поможет
public static void Number() {
for (int k = 1; k <= COUNT; k++) {
System.out.print(("____" + k).substring(("" + k).length()));
}
}
Результат
'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|
___1___2___3___4___5___6___7___8___9__10__11__12__13__14__15__16__17__18__19
Вы можете сослаться на это, но результат будет беспорядочным, если COUNT будет большим числом. Я также обновил некоторые из ваших кодов, чтобы inches и design не перекрывали последнее число.
public class JavaRuler {
public static final int COUNT = 20;
public static void main(String[] args) {
Design(" ");
Inches();
Number();
Design("|");
}
public static void Design(String s) { // Added parameter
System.out.print(s + "_"); // Added
for (int j = 0; j < COUNT * 2; j++) { // Updated
System.out.print("__");
}
System.out.print(s); // Added
System.out.println();
}
public static void Inches() {
System.out.print("|"); // Added
for (int i = 0; i < COUNT * 2; i++) { // Updated
System.out.print("'|");
}
System.out.print("'|"); // Added
System.out.println();
}
public static void Number() {
System.out.print("|"); // Added
for (int k = 1; k <= COUNT; k++) {
String underScore = " "; // Added
int length = (int) (Math.log10(k - 1) + 1);
for (int i = 1; i < length; i++) {
underScore = underScore.replaceFirst(" ", ""); // Added
}
System.out.print(underScore + k); // Updated
}
System.out.print("|"); // Added
System.out.println();
}
}
Результат:
_________________________________________________________________________________
|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|'|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20|
|_________________________________________________________________________________|
Я вернулся к этому позже сегодня, и это поразило меня! Я понял!
public class Ruler {
public static final int COUNT = 19;
public static void main(String[] args) {
Design();
Inches();
Numbers();
}
public static void Design() {
for (int j = 1; j <= COUNT * 2 + 2; j++) {
System.out.print("__");
}
System.out.println();
}
public static void Inches() {
System.out.print("|");
for (int i = 1; i <= COUNT * 2 + 2; i++) {
System.out.print("'|");
}
System.out.println();
System.out.print("");
}
public static void Numbers() {
System.out.print("|");
for (int k = 1; k <= 9; k++) {
System.out.print("___" + k);
}
System.out.print("___");
for (int m = 10; m <= COUNT; m++){
System.out.print(m + "__");
}
System.out.print("|");
}
}
Я думаю, что это не сработает, если COUNT имеет более 2 цифр (100?). И это не сработает, если COUNT меньше 9 (например, 5).
Преобразуйте строку в int, подстроив префикс на основе длины этого int