2014-02-17 2 views
1

Я пытаюсь создать программу, которая выводит альтернативный дизайн плитки с входа пользователя. И.Е. если использовать входы 3 результата будет дизайн 3x3, который выглядит следующим образом:Создание чередующегося пола плитки с вложенным контуром

|R|B|R| 
|B|R|B| 
|R|B|R| 

У меня возникли проблемы с получением нужного количества плитки для выхода. Для ввода 3 строка 2 имеет дополнительный «| R |», и впоследствии создается 4-я строка. Выходной сигнал поступает в:

|R|B|R| 
|B|R|B|R| 
|R|B|R| 
|B 

Я прикрепил свой код ниже. Я знаю, что это имеет какое-то отношение к:

if (r%2 == 0){ 
System.out.println("|"); 
System.out.print("|B"); 

Любые мысли?

import java.util.*; 

public class tileFloor { 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner (System.in); 
    System.out.println("Enter x:"); 
     int x; 
      x = input.nextInt(); 

    if (x < 10) 
    { int c = 0; 
     int r = 0; 

     while (r < x){ 
      while (c < x){ 
       if (c %2 == 0) 
       System.out.print("|R"); 
       else if (c%2 != 0) 
       System.out.print("|B"); 

      c++; 

      }//end 'while (c<x)' loop 

     if (r%2 == 0){ 
      System.out.println("|"); 
      System.out.print("|B"); 
     } 
     else if (r%2 != 0) 
      System.out.println("|"); 

     c = 0; 
     r++; 

     }//end 'while (r<x)' loop 

    }//end if statement 

    input.close(); 

}//end main 

}//end class 
+0

Почему бы вам не использовать цикл while вместо какого-то времени? Так как вы знаете, сколько раз он должен повторять? – Marcus

+0

Звучит неплохо, но мне неудобно – Cullen

+0

Вам должно быть удобно с ними. Хотя циклы опасны, потому что простая ошибка может означать, что они никогда не выходят. Far FAR меньше шансов произойти с циклами. – DFreeman

ответ

0

Попробуйте

import java.util.*; 

class tileFloor { 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner (System.in); 
    System.out.println("Enter x:"); 
     int x; 
      x = input.nextInt(); 
    int count = 0; 
    if (x < 10) 
    { int c = 0; 
     int r = 0; 

     while (r < x){ 
     if(r%2 == 0) 
     { 
      count = 0; 
     } 
     else 
     { 
      count = 1; 
     } 
      while (c < x){ 


       if (count %2 == 0) 
       { 
        System.out.print("|R"); 
       } 
       else 
       { 
        System.out.print("|B"); 
       } 

      count++; 
      c++; 

      }//end 'while (c<x)' loop 


      System.out.println("|"); 

     c = 0; 
     r++; 

     }//end 'while (r<x)' loop 

    }//end if statement 

    input.close(); 

}//end main 

}//end class 
+0

Это отлично работает с нечетными входами, но не чередуется с четными входами – Cullen

+0

Да, я работаю над ним –

+0

Я его модифицировал ... :) –

1

Что об этом решении? Совершенно ясно, что он делает:

public static void main(String[] args) { 
    try (Scanner input = new Scanner(System.in)) { 
     System.out.print("Enter x: "); 
     int x = input.nextInt(); 

     if (x < 10) { 
      int r = x; 
      int c; 

      while (r-- > 0) { 
       c = x; 

       while (c-- > 0) { 
        System.out.print("|" + ((c + r & 1) == 0 ? "R" : "B")); 
       } 

       System.out.println("|"); 
      } 
     } 
    } 
} 
+0

Он будет отлично работать для нечетного ввода, но даже для него не будет ... –

+0

Хорошо, OP на самом деле не упомянул о том, чего он ожидал в результате ... Но теперь я предполагаю, что это что-то вроде шахматного поля. .. Я исправил свой ответ! – bobbel

+0

Определенно чище, но, как упоминалось выше, у меня проблемы с циклами. Спасибо за ваш ответ, хотя! – Cullen

Смежные вопросы