2015-11-08 1 views
-1

Я - новичок в Java и программировании в целом. Попытка сделать карьеру переключателем и изучить Java. Выполнял петли и выполнял разные задачи.Проблемы с перекрытием внутреннего квадрата в большом квадрате в Java

Я хочу сделать квадрат в большой квадрате, и у меня проблема. Вот мой код:

import java.util.Scanner; 

public class SquareLoop { 

private static Scanner input; 

public static void main(String[] args) { 

    input = new Scanner(System.in); 
    System.out.println("Please enter your star value: "); 
    int value = input.nextInt(); 
    System.out.println("Please enter the second square value: "); 
    int value2 = input.nextInt(); 

    for (int i = 0; i <= value; i++) { 
     for (int j = 0; j <= value; j++) { 
      if(i != value2 || i != value && j != value2 || j != value) 
       System.out.print(" "); 
      if (i == 0 || i == value || i == value - value2 || i == value2) 
       System.out.print("*"); 
      else if (j == 0 || j == value || j == value - value2 || j == value2) 
       System.out.print("*"); 

      else 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 
} 
} 

Вот мой результат My result

Любая помощь приветствуется. Я не хочу решения, но рекомендации немного более конкретны.

+0

В чем проблема, связанная с тем, что вы задаете этот вопрос? Что происходит и что вы ожидали вместо этого? –

+0

Я хочу напечатать один квадрат, а затем еще один меньший внутри него. Вы можете увидеть мой результат, я прикрепил фотографию. – JuniorJ

+0

что не так с фото? Он имеет квадрат внутри квадрата. –

ответ

1

Я думаю, что ваша проблема связана с реляционными и логическими операторами, которые вы используете. Вы получите краткий обзор здесь: 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/
Смежные вопросы