Java 为什么LocalDate值没有';新台币定在今天

Java 为什么LocalDate值没有';新台币定在今天,java,android,date,datetime,calendar,Java,Android,Date,Datetime,Calendar,所以我有7个不同的按钮,我想在每个按钮上按当前日期+顺序设置提示 DateTimeFormatter dateFormater = DateTimeFormatter.ofPattern("d"); ZoneId zone = ZoneId.of("Asia/Jakarta"); LocalDate date = LocalDate.now(zone); int amount = 1; int buttonCount = 7;

所以我有7个不同的按钮,我想在每个
按钮上按当前
日期+
顺序设置提示

DateTimeFormatter dateFormater = DateTimeFormatter.ofPattern("d");
        ZoneId zone = ZoneId.of("Asia/Jakarta");
        LocalDate date = LocalDate.now(zone);
        int amount = 1;
        int buttonCount = 7;
        for (int i = 0; i < buttonCount; i++){
            hari1.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari2.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari3.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari4.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari5.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari6.setHint(date.format(dateFormater));
            date = date.plusDays(amount);
            hari7.setHint(date.format(dateFormater));
        }

代码的问题在于,在循环的7次迭代中,每次都将提示分配给所有按钮,因此每个按钮分配7个任务,总共分配49个任务,增加每个任务后的日期,因此到达这些错误的日期。
因此,结果是您看到上一次迭代分配的值明显错误。
在每次迭代中为1个按钮分配1个任务,如下所示:

DateTimeFormatter dateFormater = DateTimeFormatter.ofPattern("d");
ZoneId zone = ZoneId.of("Asia/Jakarta");
LocalDate date = LocalDate.now(zone);
int amount = 1;
int buttonCount = 7;
for (int i = 0; i < buttonCount; i++){
    int buttonId = getResources().getIdentifier("hari_" + (i + 1), "id", getPackageName()); 
    Button button = (Button) findViewById(buttonId);
    button.setHint(date.format(dateFormater));
    date = date.plusDays(amount);
}
您可以通过此行获得每个按钮的整数
id

int buttonId = getResources().getIdentifier("hari_" + (i + 1), "id", getPackageName());
Button button = (Button) findViewById(buttonId);
得到一个引用按钮的变量

使用流 答案是正确的。为了好玩,让我们尝试使用流。我并不是说这比第一个解决方案要好,只是一个替代方案

我们用一个数字数到七。我们使用生成的整数向当前日期添加天数,并使用另一个答案中显示的命名方法访问特定按钮

我们打电话给你,而不是经过一个月的一天。通过将整型转换为字符串

我没有试过运行这段代码,因为我不做Android工作。但希望它接近成功

ZoneId z = ZoneId.of( "Asia/Jakarta" ) ;
LocalDate today = LocalDate.now( z ) ;

IntStream
.range( 0 ,  7 )
.forEach( 
    i -> 
    ( 
        (Button) findViewById( 
            getResources().getIdentifier( "hari_" + (i + 1), "id" , getPackageName() )   // See: https://stackoverflow.com/a/59849331/642706  
        ) 
    )                         // Returns a `Button`.
    .setHint ( 
        String.valueOf(       // Convert int (day-of-month) to text.
            today
            .plusDays( i )    // Produces a new `LocalDate` object rather than modifying the original (immutable objects). 
            .getDayOfMonth()  // Returns an `int`. 
        )
    )  
    ;
)
;

我怎么处理“n”?这是厄罗无法解析的符号。我应该为此创建新的变量int吗?我在
button.setHint(date.format(dateformatter))行中得到了erorvoid android.widget.Button.setHint(java.lang.CharSequence)“”是否为空?为什么?
hari1=(按钮)findviewbyd(R.id.hari_1)id在xml中
hari_1
hari_2
hari_3
,等等。谢谢您的建议,先生。很高兴知道处理这些案件的另一种方法。非常感谢…很高兴看到你发布了一个问题,并得到了一两个似乎有用的答案。
ZoneId z = ZoneId.of( "Asia/Jakarta" ) ;
LocalDate today = LocalDate.now( z ) ;

IntStream
.range( 0 ,  7 )
.forEach( 
    i -> 
    ( 
        (Button) findViewById( 
            getResources().getIdentifier( "hari_" + (i + 1), "id" , getPackageName() )   // See: https://stackoverflow.com/a/59849331/642706  
        ) 
    )                         // Returns a `Button`.
    .setHint ( 
        String.valueOf(       // Convert int (day-of-month) to text.
            today
            .plusDays( i )    // Produces a new `LocalDate` object rather than modifying the original (immutable objects). 
            .getDayOfMonth()  // Returns an `int`. 
        )
    )  
    ;
)
;