在 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 将打印一个“”。
一些建议、想法和资源
- 您应该能够结合使用逻辑运算符和关系运算符来定位您想要的 row/column 中的一系列位置。例如:
(j == upper_row || j == lower_row) && (i > left_column && i < right_column)
- 您可能想要重构变量以更深入地了解每个变量在做什么。一般来说,在编程时宣扬以下观点:"Variable names should be short yet meaningful." 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/
我是 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 将打印一个“”。
一些建议、想法和资源
- 您应该能够结合使用逻辑运算符和关系运算符来定位您想要的 row/column 中的一系列位置。例如:
(j == upper_row || j == lower_row) && (i > left_column && i < right_column)
- 您可能想要重构变量以更深入地了解每个变量在做什么。一般来说,在编程时宣扬以下观点:"Variable names should be short yet meaningful." 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/