Я пытаюсь распечатать звезду ASCII с помощью java
Я пытаюсь распечатать изображение ниже, используя
for
петля. я использую
for
петли и
if
операторы для создания звезды ASCII в Java.
Мой код:
public class asciistar
{
public static void main(String[] args)
{
final int X = 9;
for (int R = 0; R < X; R++)
{
for (int V = 0; V < X; V++)
{
if (R == V || R + V == X - 1 || V == X/2 || R == X/2)
{
System.out.print("* ");
}
else
{
System.out.print(" ");
}
}
}
}
}
6 ответов
Ваш код работает! Просто добавьте вывод новой строки в конце внешнего цикла:
public static void main(String[] args) {
final int X = 9;
for (int R = 0; R < X; R++)
{
for (int V = 0; V < X; V++)
{
if (R == V || R + V == X - 1 || V == X/2 || R == X/2)
{
System.out.print("* ");
}
else
{
System.out.print(" ");
}
}
System.out.println("");
}
}
Результат:
* * *
* * *
* * *
* * *
* * * * * * * * *
* * *
* * *
* * *
* * *
Вы никогда не вводите новую строку. Вы должны вставить новую строку во внешний цикл:System.out.print("\n");
public Cheater()
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
String path = "https://i.stack.imgur.com/xUAW1.png";
URL url = new URL(path);
BufferedImage image = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(image));
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(label);
f.pack();
f.setLocation(200, 200);
f.setVisible(true);
} catch (Exception exp) { exp.printStackTrace();}
}
});
}
Выход :
4K, почти похоже на картинку
эй, все еще звезда ASCII в java: D
Вы можете использовать поток в потоке вместо цикла в цикле следующим образом:
int m = 9;
IntStream.range(0, m).forEach(i -> {
IntStream.range(0, m).forEach(j -> {
if (i == j || i + j == m - 1 || i == m / 2 || j == m / 2) {
System.out.print("* ");
} else {
System.out.print(" ");
}
});
System.out.println();
});
Выход:
* * *
* * *
* * *
* * *
* * * * * * * * *
* * *
* * *
* * *
* * *
Вы можете визуализировать звезду как начало координат на плоскости и выполнять итерацию от
-n
к
n
чтобы упростить ваш код.
int m = 5;
IntStream.rangeClosed(-m, m)
.map(Math::abs)
.peek(i -> IntStream.rangeClosed(-m, m)
.map(Math::abs)
.mapToObj(j -> i == 0 || j == 0
|| i == j ? "* " : " ")
.forEach(System.out::print))
.forEach(i -> System.out.println());
Выход:
* * *
* * *
* * *
* * *
* * *
* * * * * * * * * * *
* * *
* * *
* * *
* * *
* * *
См. Также: Создание песочных часов с помощью звездочек в java
После цикла for "V" и внутри цикла for "R" добавьте оператор print line для вывода каждой строки:
System.out.println();