我想做什么
缺席:创建一个数组,记录每天缺席的员工数量;它应该足够大,可以存储整整一个月的数据。例如,在该月的第一天,1名员工缺席;第二天,0名员工缺席;第三天缺席3次;最终在本月的最后一天有2次缺席。该数据不需要由用户输入。
提示用户输入数字;显示他们输入当天的缺席次数
我有什么:
-X
答案 0 :(得分:0)
首先,您可以使用数组列表声明数组元素,如下所示:
mArray = {0,0,0,20,0,2,20};//fill with your values
在用户输入当天打印出缺席次数时,首先检查该号码是否超出界限
if(input > mArray.length-1 || input < 0){
System.out.println("That is a invalid input!");
}else{
System.out.println("Their were " + mArray[input] + " absences on day : " + input);
您需要在调用该输入之前检查输入,以防止OutOfBoundsExceptions崩溃您的程序。
答案 1 :(得分:0)
System.out.println("On the Date " + a + "has " + mArray[a] + " absences" );
这是您问题的直接答案。正如前一篇文章中所建议的那样,您应该进行边界测试。
答案 2 :(得分:0)
我个人建议进行以下修改。 您可以简化数组的创建,您需要检查使用while循环输入的无效整数(并重试直到成功)或(而不是while循环)添加try-catch块,并且您可以访问该值你正在使用
从数组中寻找mArray[a].
以下代码利用这些建议,并使用while循环修改它以处理可能抛出的ArrayIndexOutOfBoundsException。如果需要,可以删除或替换为try-catch。
package absences;
import java.util.Scanner;
/**
*
* @author Matthew
*/
public class Absences {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int a = -1;
System.out.println("Enter the date.");
while ( a < 0 || a > 31 )
{
try
{
a = keyboard.nextInt();
} catch (InputMismatchException e) {
sc.next();
}
if ( a < 0 || a > 31 )
System.out.println("Invalid date, try again!");
}
int[] mArray = {0,1,0,3,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}
System.out.println("On the Date " + a + "has " + mArray[a] + " absences" );
}
}
此外,马修正确地指出,没有几个月有32天。在处理日期和时间时,我建议您查看日历或时间类。
编辑:我修改了我的代码,因为我忽略了这样一个事实,即获取int输入的方法不起作用,正如Preyas Shah在答案中正确指出的那样。
答案 3 :(得分:0)
还有一件事。以前的答案,数组绑定检查似乎很好,应该解决问题。 但是,还有一件事。您正在使用的方法:
int a = keyboard.next()。charAt(0);
根据我的理解,它只会从字符串中获取第一个字符,比如日期输入是&#39; 23&#39;,它只需要&#39; 2&#39;。因此,您从用户获得的所有索引值仅为单个数字。 我检查了Java API,不确定这是否有用。
int a = keyboard.nextInt();
请让我知道,我也试图更好地理解。