我一般都是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 :(得分:1)
我认为您的麻烦在于您正在使用的关系和逻辑运算符。您将在此处获得简要概述:http://www.tutorialspoint.com/java/java_basic_operators.htm。 或者更详细地了解逻辑运算符的一般原则:https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Logical_Operators
但总的来说,我已将其置于一些有用的一般信息之下,澄清了您的代码现在正在做什么,以及底部的一些建议。
OR运算符 - ||
TRUE || TRUE = TRUE
TRUE || FALSE = TRUE
FALSE || TRUE = TRUE
FALSE || FALSE = FALSE
AND运营商 - &amp;&amp;
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语句实际上最终总是为真(替换&#34;&#34;用&#34; x&#34;并查看结果)。我不认为这里需要if语句,但您可以使用以下资源来获取运算符优先级/操作顺序的要点: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(" ");
正如预期的那样,如果您的代码没有放下&#34; *&#34;,则其他人会打印一个&#34; &#34;
一些建议,思考和&amp;资源强>
(j == upper_row || j == lower_row) && (i > left_column && i < right_column)