Задать вопрос
@mk_qwerty

Как найти эффективное решение задачи (Java)?

Доброго времени суток, решал задачу, но решение не эффективно. Как можно сделать его эффективней и короче?

Условие задачи: Напишите программу, которая получает целое число в n как аргумент командной строки и использует вложенные циклы для вывода "шахматной доски" n*n элементов.

public class checkerBoard{
  public static void main(String[] args){
    int n = Integer.parseInt(args[0]);

    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++){
          if (i % 2 == 0){
            if(j % n != 0){
              if (j % 2 == 0){
                System.out.print("*");
              }
              else System.out.print("-");
            }
            else{
              if (j % 2 == 0){
                System.out.println("*");
              }
              else System.out.println("-");
            }
          }
          else{
            if(j % n != 0){
              if (j % 2 == 0){
                System.out.print("-");
              }
              else System.out.print("*");
            }
            else{
              if (j % 2 == 0){
                System.out.println("-");
              }
              else System.out.println("*");
            }
          }

        }
    }
  }
}
  • Вопрос задан
  • 235 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Виктор Мальков,
еще в копилку, не короче но вызовет приступ у ненавистников лямбд и стримов
IntStream.rangeClosed(1, n).forEach(i -> {
            IntStream.rangeClosed(1, n).forEach(j -> 
                System.out.print((i + j) % 2 == 0 ? '*' : '-'));
        System.out.println();});


Еще изврат, правда будет работать только с нечетными числами но зато в один цикл! =).
IntStream.rangeClosed(1, n*n).forEach(i -> System.out.print(i % n != 0 ? (i % 2==0 ?'*':'-') : '\n'));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@krka92
Джаву, увы, не знаю
procedure WriteCheckLine(Len: Integer; Offset: Byte);
var i: Integer;
begin
  for i := Offset to Len - 1 + Offset do
  begin
    if i and 1 > 0 then Write('*')
    else Write('-');
  end;
  WriteLn;
end;

procedure WriteCheckBoard(N: Integer);
var i: Integer;
begin
  for i := 0 to N - 1 do WriteCheckLine(N, i and 1);
end;


или без вызова
procedure WriteCheckBoard(N: Integer);
var i, j, Offset: Integer;
begin
  for i := 0 to N - 1 do
  begin
    Offset := i and 1;
    for j := Offset to N - 1 + Offset do
    begin
      if j and 1 > 0 then Write('*')
      else Write('-');
    end;
    WriteLn;
  end;
end;


Как удобнее будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект