在 Java 的较大正方形内重叠内部正方形有问题

Having problems with overlapping inner square within a larger square in 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

感谢任何帮助。我不想要解决方案,但可能需要更具体的指南。

我认为您的问题出在您使用的关系运算符和逻辑运算符上。您将在此处获得简要概述:http://www.tutorialspoint.com/java/java_basic_operators.htm。 或者更详细地了解逻辑运算符的一般原则:https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Logical_Operators

但一般来说,我在下面放置了一些有用的一般信息,说明了您的代码现在正在做什么,并在底部提供了一些建议。

或运算符 - ||

TRUE  || TRUE  = TRUE
TRUE  || FALSE = TRUE
FALSE || TRUE  = TRUE
FALSE || FALSE = FALSE

AND 运算符 - &&

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循环:

for (int i = 0; i <= value; i++) {
    for (int j = 0; j <= value; j++) {

目前,您正在使用从 0 到输入值的 for 循环,包括。这意味着打印的星星实际上比输入的数字多打印一颗星星 (0, 1, 2 .. value-1, value)

接下来你的 If 语句:

if(i != value2 || i != value && j != value2 || j != value)
    System.out.print(" ");

由于操作顺序,这个 if 语句实际上最终总是为真(将“”替换为 "x" 并查看结果)。我认为这里不需要 if 语句,但您可以使用以下资源来获取运算符 precedence/order 操作的要点:http://introcs.cs.princeton.edu/java/11precedence/。请注意,更改 if 语句中的运算顺序与在代数中相同——使用括号。即

(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 语句:

if (i == 0 || i == value  || i == value - value2 || i == value2)
    System.out.print("*");

上面的代码为 i = 0、value、value-value2 或 value2 的整个列打印一个星号。我们以value = 7, value2 = 3

为例

目前(记住我从 0 到 7):

i == 0 grabs:
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -
// * - - - - - - -

i == value grabs:
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *
// - - - - - - - *

i == value - value2 (7 - 3 = 4) grabs:
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -
// - - - - * - - -

i == value2 (3) grabs:
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -
// - - - * - - - -

同样,看一下您的第三个 if 语句:

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(" ");

正如预期的那样,如果您的代码没有写下“*”,则此 else 将打印一个“”。

一些建议、想法和资源