Я думаю, что ваша проблема связана с реляционными и логическими операторами, которые вы используете. Вы получите краткий обзор здесь: http://www.tutorialspoint.com/java/java_basic_operators.htm. Или для более подробного рассмотрения общих принципов логических операторов: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Logical_Operators
Но, как правило, я разместил ниже некоторой полезной информации общего характера, разъяснение того, что ваш код делает сейчас, и некоторые предложения в то дно.
OR Operator - ||
TRUE || TRUE = TRUE
TRUE || FALSE = TRUE
FALSE || TRUE = TRUE
FALSE || FALSE = FALSE
И Operator - & &
TRUE && TRUE = TRUE
TRUE && FALSE = FALSE
FALSE && TRUE = FALSE
FALSE && FALSE = FALSE
реляционные операторы
== //Specific Equality (A == B = TRUE iff A has the same value as B)
<, > //Less Than/Greater Than (A < B or A > B -- excludes B)
<=, >= //Less Than/Greater Than *or Equal To* (A <= B or A >= B -- inclusive of B)
!= //Specific Inequality
Учитывая вышеизложенное, из вашего вопроса, я понимаю, у вас есть this
и вы хотите что-то вроде this
Текущий код:
Если это о сути этого, я рекомендую еще раз взглянуть на логику, которую вы используете. Что я буду делать здесь уточнить код, который вы получили, и мы надеемся, вы можете воспользоваться этой информацией для устранения соответственно:
Сначала давайте посмотрим на ваши для-петли:
for (int i = 0; i <= value; i++) {
for (int j = 0; j <= value; j++) {
В настоящее время, вам используя for-loop, который переходит от 0 к введенному значению, включительно. Это означает, что звезды, напечатанные на самом деле напечатать еще одну звезды, чем введенное число (0, 1, 2 .. стоимость 1, значения)
Следующих ваши If-заявления:
if(i != value2 || i != value && j != value2 || j != value)
System.out.print(" ");
это, если утверждение фактически заканчивается всегда истинным из-за порядка операций (замените «" на «x» и увидите результат). Я не думаю, что здесь требуется инструкция if, но вы можете использовать следующий ресурс, чтобы получить представление о приоритете/порядке операций операторов: http://introcs.cs.princeton.edu/java/11precedence/. Имейте в виду, что изменить порядок операций в if-statement так же, как в алгебре, - с помощью скобок. то есть
(Order of Operations: Left to Right)
False || True && True && True
=> True && True && True
=> True && True
=> True
(False || True) && (True && False)
=> (True) && (True && False)
=> (True) && (False)
=> False
Ваш второй Условный оператор:
if (i == 0 || i == value || i == value - value2 || i == value2)
System.out.print("*");
Приведенный выше код печатает звезду для всего столбца, где я = 0, значение, значение-value2 или value2. Давайте возьмем пример значения = 7, значение2 = 3
В настоящее время (и помните, я от 0 до 7):
i == 0 grabs:
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
i == value grabs:
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
i == value - value2 (7 - 3 = 4) grabs:
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
i == value2 (3) grabs:
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
Точно так же, посмотрим на ваш третий, если заявление:
else if (j == 0 || j == value || j == value - value2 || j == value2)
System.out.print("*");
В настоящее время:
j == 0 grabs:
// * * * * * * * *
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
j == value grabs:
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// * * * * * * * *
j == value - value2 (7 - 3 = 4) grabs:
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// * * * * * * * *
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
and j == value2 (3) grabs:
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// * * * * * * * *
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
// - - - - - - - -
И, наконец:
else
System.out.print(" ");
Как и ожидалось, если ваш код не помещает «*», это еще печатает «».
Некоторые рекомендации, Мысли, & Ресурсы
- Вы должны быть в состоянии использовать комбинацию логических и реляционных операторов целевой диапазон позиций в строке/столбце вы хотите. Например:
(j == upper_row || j == lower_row) && (i > left_column && i < right_column)
- Возможно, вы захотите реорганизовать свои переменные, чтобы дать больше информации о том, что каждый делает. В общем, во время программирования проповедуются следующие чувства: «Имена переменных должны быть короткими, но значимыми». http://www.oracle.com/technetwork/java/codeconventions-135099.html
- Кроме того, вы можете гарантировать, что значение держит большее количество (Math.min или Math.max может помочь вам с этим) http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html
- В общем, Java API - Oracle документация может быть очень полезной, когда Обучение: http://docs.oracle.com/javase/7/docs/api/
В чем проблема, связанная с тем, что вы задаете этот вопрос? Что происходит и что вы ожидали вместо этого? –
Я хочу напечатать один квадрат, а затем еще один меньший внутри него. Вы можете увидеть мой результат, я прикрепил фотографию. – JuniorJ
что не так с фото? Он имеет квадрат внутри квадрата. –