Цикл For () с постоянной переменной не выводит вывод - PullRequest
0 голосов
/ 10 февраля 2019

АКТУАЛЬНАЯ проблема в том, что не происходит никакого вывода, а не дополнительного println ().Это странно, потому что, выполняя это программирование без статической переменной SIZE var, он прекрасно работает

public class SlashFigure2
{
    public static final int SIZE = 4;
    public static void main(String[] args)
    {
        for(int i = 1; i <= SIZE; i++)
        {
            for(int j = 1; j <= 2 * i - (2 * SIZE + 2); j++)
            {
                System.out.print("\\");
            }

            for(int j = 1; j <= -4 * i + (-4 * SIZE + 2); j++)
            {
                System.out.print("!");
            }

            for(int j = 1; j <= 2 * i - (2 * SIZE + 2); j++)
            {
                System.out.print("/");
            }

            System.out.println();
        }      
    }  

}

Если кому-то это нужно, вот что печатает программа:

!!!!!!!!!!!!!!
\\!!!!!!!!!!//
\\\\!!!!!!////
\\\\\\!!//////

РЕДАКТИРОВАТЬ: Вот что говорит сайт об ошибке:

РЕДАКТИРОВАТЬ 2: Сайт - practiceit.csu.washington.edu

Вот формулировка вопроса:

"Измените вашу программу DollarFigure из предыдущего упражнения, чтобы она стала новой программой под названием DollarFigure2, которая использует глобальную константу для высоты фигуры. (Вы можете сначала создать таблицы циклов.) В предыдущем выводе использовалась постоянная высота 7.выходы ниже используют постоянный размер 3 (слева) и 5 ​​(справа)

Вот выходы ниже, о которых они говорят

(Вы должны решить эту проблему, используятолько ОДНА общедоступная статическая конечная константа, а не несколько констант; и ее значение должно использоваться способом, описанным в этой задаче.) "

Ответы [ 4 ]

0 голосов
/ 11 февраля 2019

Разобрался!Оказывается, что для символов '\' и '/' мне не нужно было использовать эту формулу (x * SIZE + y) в конце концов.Им обоим нужна обычная формула, а "!"это единственный символ, которому нужна формула РАЗМЕРА

public class SlashFigure2
{
    public static final int SIZE = 4;
    //program works no matter what value SIZE holds
    public static void main(String[] args)
    {
        for(int i = 1; i <= SIZE; i++)
        {
            for(int j = 1; j <= 2 * i - 2; j++)
            {
                System.out.print("\\");
            }
            
            //note the SIZE formula in here
            for(int j = 1; j <= -4 * i + (4 * SIZE + 2); j++)
            {
                System.out.print("!");
            }
            
            for(int j = 1; j <= 2 * i - 2; j++)
            {
                System.out.print("/");
            }
            
            System.out.println();
        }      
    }  
    
}
0 голосов
/ 10 февраля 2019

Вы можете внести это изменение в свой код, чтобы заставить его работать. Вы не должны выполнять инструкцию, когда i равно SIZE

if(i<SIZE){
    System.out.println();
    }
0 голосов
/ 10 февраля 2019

Несколько Опасность , чтобы выяснить реальную проблему / квест, который вы хотите решить, путем алгоритмической печати определенного ASCII-произведения, обозначенного только константой ROW-size (например, 4 или 6как показано на прилагаемом изображении).

Испытания и пример вывода

enter image description here

Производная спецификация

Draw a специфическая цифра, отличающаяся только ее высотой :

  • только передается один параметр : строки ASCII-искусство рисования
  • рисунок для рисования должен напоминать стрелку вниз
  • , окаймленную двойными косыми чертами влево и вправо, то есть \\ соответственно //
  • без рамки /косые черты в первом ряду
  • внутренние / остальные строки, заполненные восклицательными знаками !!
  • не менее двух восклицательных знаков !! во внутреннем последнем ряду

Java-метод с одним параметром: ROWS

private static void drawAsciiArt(int rows) {
    int columns = (rows-1)*4+2;

    for(int i = 1; i <= rows; i++) {
        int borderSize = (i-1)*2;
        int fillSize = columns - borderSize*2;

        for(int j = 1; j <= borderSize; j++) {
            System.out.print("\\");
        }

        for(int j = 1; j <= fillSize; j++) {
            System.out.print("!");
        }

        for(int j = 1; j <= borderSize; j++) {
            System.out.print("/");
        }

        if (i < rows) {
            System.out.println();
        } // if not last row

    } // end of row-loop
}

Попробуйте онлайн

0 голосов
/ 10 февраля 2019

Просто сделайте это:

if (i != SIZE) {
    System.out.println();
}

Поскольку i будет равен SIZE на последней итерации, и вы хотите пропустить println() в этом случае.

ОБНОВЛЕНИЕ

Из комментариев и изображения ясно, что вы не должны определять SIZE как константу, очевидно, вы должны быть в состоянии передать n какПараметр вашей программы, это не жестко заданное значение.Проверьте правила «сайта», на который вы продолжаете ссылаться, как предполагается, что вход получен?

...