-1

我是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();
    }
}
}

这是我的结果 我的结果

任何帮助表示赞赏。我不想要一个解决方案,但指导方针可能更具体一些。

4

1 回答 1

1

我认为您的问题在于您使用的关系和逻辑运算符。您将在此处获得简要概述: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

鉴于上述情况,从你的问题我认为你有这个

你想要这样的东西

当前代码:

如果这是关于它的要点,我建议再看看你正在使用的逻辑。我将在这里做的是澄清您拥有的代码,并希望您可以利用这些信息进行相应的故障排除:

首先让我们看看你的 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 语句,但您可以使用以下资源来获取运算符优先级/操作顺序的要点:http: //introcs.cs.princeton.edu/java/11precedence/。请注意,更改 if 语句中的操作顺序与代数中的操作顺序相同——使用括号。IE

(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 为例

目前(记住 i 从 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(" ");

正如预期的那样,如果您的代码没有写下“*”,那么这会打印一个“”。

一些建议、想法和资源

于 2015-11-10T21:39:52.797 回答