在Java

时间:2015-11-08 17:55:55

标签: java square

我一般都是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

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

1 个答案:

答案 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;资源