Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
画布坐标在“中”;至于;循环,Java_Java_Calendar - Fatal编程技术网

画布坐标在“中”;至于;循环,Java

画布坐标在“中”;至于;循环,Java,java,calendar,Java,Calendar,我有一个初学者的问题。在整个生命周期中,我无法在if语句中从概念上理解这段代码:5*I+j>=7 这是《Java艺术与科学》一书中“日历程序”练习的一部分。我的主要问题是如何在一个工作日内设置一个月的第一个日期,从而将日历中一个月的所有日期都推过几天 我查找了答案,但仍然没有得到它,解决方案是在if语句中简单地添加5*I+j>=7,它可以工作,但是如何工作呢? 更改i或j是我最初的想法,但我不知道添加它们如何在不移动整个星期的情况下将日历日正确地移动到右侧 我删除了实际日历方块的代码,同时尝试分

我有一个初学者的问题。在整个生命周期中,我无法在if语句中从概念上理解这段代码:5*I+j>=7

这是《Java艺术与科学》一书中“日历程序”练习的一部分。我的主要问题是如何在一个工作日内设置一个月的第一个日期,从而将日历中一个月的所有日期都推过几天

我查找了答案,但仍然没有得到它,解决方案是在if语句中简单地添加5*I+j>=7,它可以工作,但是如何工作呢? 更改i或j是我最初的想法,但我不知道添加它们如何在不移动整个星期的情况下将日历日正确地移动到右侧

我删除了实际日历方块的代码,同时尝试分解问题,使其更精简

import acm.program.*;
import acm.graphics.*;

public class RandomCodeTesting extends GraphicsProgram{

    private static final int DAYS_IN_MONTH = 31;
    private static final int DAY_MONTH_STARTS =5;

    public void run() {
        int d = 1;  
        for (int i=1; i<6; i++) {
            for (int j=0; j<7; j++) {
                int x= j*45;
                int y= i*15;
                if (5*i+j>= 7 && d <= 31) {
                    add(new GLabel(""+d), x, y);
                    d++;
                }       
            }   
        } 

    }   
导入acm.program.*;
导入acm图形。*;
公共类随机码测试扩展GraphicsProgram{
月内私人静态最终整数天=31;
私有静态最终整数天\月\开始=5;
公开募捐{
int d=1;

对于(inti=1;i而言,条件应该是
天\月\开始*i+j>=7

这基本上是确定是否将
GLabel
放在坐标1
(j,i)

让我们考虑<代码> Day-UnthTythActudio< /Case>等于5。这意味着坐标<代码>(0, 1)<代码>和<代码>(1, 1)< /代码>不应该有<代码> Galabel< /C> >,使日历的第一行有5个代码> Galabel< /Case> s,而中间的所有行都有7个代码> Galabel< /Calp>S.

通常,x值小于
(7天/月开始)
且y值为1的任何坐标都不应具有
GLabel

这意味着您可以将条件重写为:

if(!(j < (7 - DAY_MONTH_STARTS) && i == 1) && d <= DAYS_IN_MONTH) {
    add(new GLabel(""+d), x, y);
    d++;
}

如果(!(j<(7天/月开始)&&i==1)和&d=7
真的只是一个数学把戏,做同样的事情。

答案不错。这是一个很好的例子,说明为什么应用程序开发者通常不应该使用聪明的“数学把戏”“代码。我会选择使用本答案中显示的更长、更自我记录的代码,而不是问题中显示的更短的代码。