背景は最後に説明します。
要するに、次の foor ループが yearInt 0 ~ 8 に対して機能するのに、yearInt 変数が 9 の場合、ループが無限になるのはなぜですか?
int yearInt = 9;//scanned year - for testing
int currentYearFourNumbers = Calendar.getInstance().get(Calendar.YEAR); // current year
currentYearFourNumbers = 2023; // for testing!!
int currentYearLastDigit=currentYearFourNumbers%10; //mod operator for getting last digit of current year
int resultYear = currentYearFourNumbers; //init int result which will represent the identified year
int checkNumber = currentYearLastDigit; //counter or check number for for loop
for (int i = yearInt; i != checkNumber; checkNumber--){
checkNumber = resultYear%10;
System.out.println (checkNumber);
System.out.println (i);
resultYear = resultYear -1;
System.out.println (resultYear);
}
私が8を持っている場合、それは動作します出力を参照してください:
チェック:3 に対して 8 2022 チェック:2 に対して 8 2021 チェック:1 に対して 8 2020 チェック:0 に対して 8 2019 チェック:9 に対して 8 2018 製造日 2018
バックグラウンド:
1 桁に基づいてデータベースに入力する必要がある年を決定するロジックを作成する必要があります。この数字は、デバイスからスキャンされたシリアル番号の一部であり、製造年を表しています。
数字の 4 は現在 2004 年を表しているはずですが、来年は 2014 年を表す必要があります。ロジックは 2020 年にも機能するはずなので、「永続的な」ソリューションが必要です。
そのため、スキャンした数字を取り、それを現在の年の最後の数字と比較する for ループを作成しました。次に、年の最後の桁がスキャンされた年と同じになるまで、その時点で年を減算します (デバイスは未来の日付を持つことはできません)。