用Java打印一周中的哪一天

用Java打印一周中的哪一天,java,math,Java,Math,我试图让我的程序使用我必须编写和声明的函数打印出任何给定日期的日期,尽管对于一个月的早期日期,程序似乎不打印写入日期。DayOfWeek函数中的方程w是给我们计算当天的,尽管为了使用“floor”代码,我不得不创建另一个“private static”函数,原因我不太清楚,有什么原因会很好,有什么原因我的程序在某些日期没有返回正确的日期 这是我的代码,任何帮助都将不胜感激:) import java.util.Scanner; 导入javax.swing.JOptionPane; 公共课星期一{

我试图让我的程序使用我必须编写和声明的函数打印出任何给定日期的日期,尽管对于一个月的早期日期,程序似乎不打印写入日期。DayOfWeek函数中的方程w是给我们计算当天的,尽管为了使用“floor”代码,我不得不创建另一个“private static”函数,原因我不太清楚,有什么原因会很好,有什么原因我的程序在某些日期没有返回正确的日期

这是我的代码,任何帮助都将不胜感激:)

import java.util.Scanner;
导入javax.swing.JOptionPane;
公共课星期一{
公共静态最终int 9月~4月~6月~11月~30天;
公共静态最终整数休息天数=31天;
公共静态最终整数闰年2月=29;
公共静态最终int正常值=28;
公共静态最终整数月=12;
公共静态void main(字符串[]args){
尝试
{
字符串输入=JOptionPane.showInputDialog(“输入日期(日/月/年):”;
扫描仪=新扫描仪(输入);
scanner.useDelimiter(“/”);
int day=scanner.nextInt();
int month=scanner.nextInt();
int year=scanner.nextInt();
scanner.close();
字符串numberrending=numberrending(天);
字符串dayEnding=天+数字呈现;
字符串monthName=monthName(月);
字符串dayName=DayOfWeek(天、月、年);
if(有效期(日、月、年))
{
JOptionPane.showMessageDialog(空,dayName+“”+dayEnding+“”+monthName
+“+year+”是有效日期。”);
}
其他的
{
JOptionPane.showMessageDialog(null,“+dayEnding+”+monthName
+“+年+”不是有效日期。“,
“错误”,作业窗格。错误消息);
}
}
捕获(NullPointerException异常)
{
}
catch(java.util.NoSuchElementException异常)
{
JOptionPane.showMessageDialog(null,“未输入任何数字。\n请重新启动并重试。”,
“错误”,作业窗格。错误消息);
}       
}
公共静态布尔值有效期(整数天、整数月、整数年){
返回((年>=0)和&(月>=1)和&(月=1)和&(日=10和日我将使用该库


有关更多信息和示例,请参见Joda Time。

我认为您需要使用
Math.floor()
方法。只需将此方法称为floor方法:

(day + Math.floor(2.6 * (((month+9) % 12)+ 1) -0.2) 
                + y + Math.floor(y/4) + Math.floor(c/4) - (2*c));
您也可以使用
(int)
直接转换方程式:

但是,在您的情况下,我认为使用casting将不正确地舍入值,因此您可能应该使用floor方法


如果您想了解有关地板和铸造之间差异的其他信息,这里有一个stackoverflow问题可以解决此问题:

如果发现异常,您应该对其进行处理(至少,记录/通知用户)很抱歉,我错过了你应该自己写这篇文章的机会。我也不太确定,是的,这就是我想知道的,因为最后一个函数的返回值只有0,尽管把它放进去是我唯一能让“w”方程起作用的方程……我们的讲师给了我们这个方程“w=(天+地板)(2.6*((月+9)%12)+1)-0.2)+y+地板(y/4)+地板(c/4)-2c)模块7“我不知道他是否愿意把它改得太多或者什么?谢谢,我已经照你说的做了,并且打印出了更准确的日期,但是出于某种原因,有些日期落后了一天,或者提前了一天,出于某种奇怪的原因…@GregPenrose我想我知道问题出在哪里了。我相信你的讲师希望你使用数学。floor()方法。这与直接转换为int有不同的行为。我将编辑我的答案,以确保我认为是正确的。啊……我觉得自己像个白痴,我以前这么做过,但一直出现错误,我没有意识到将“w”设置为int,没有将等式转换为int,感谢帮助,程序现在运行得很好!
import org.joda.time.DateTime

final DateTime date = new DateTime();
final int dayOfWeek = date.getDayOfWeek();
(day + Math.floor(2.6 * (((month+9) % 12)+ 1) -0.2) 
                + y + Math.floor(y/4) + Math.floor(c/4) - (2*c));
int w = (int) (day + 2.6 * ((month+9) % 12 + 1) - 0.2 + y + (y/4) + (c/4) - (2*c));