Как найти эффективное решение задачи (Java)?
Виктор Мальков, 
еще в копилку, не короче но вызовет приступ у ненавистников лямбд и стримов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'));
Джаву, увы, не знаю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;
Как удобнее будет