[英]How can I print out an Array position
我想做什么
缺勤:创建一个数组,记录每天缺勤的员工人数; 它应该足够大以存储一整月的数据。 例如,当月的第一天,有 1 名员工缺勤; 第二天,0名员工缺勤; 第三天缺席3次; 最终在本月的最后一天有 2 次缺勤。 该数据不需要由用户输入。
提示用户输入一个数字; 显示他们进入当天的缺勤次数
我拥有的:
package absences;
import java.util.Scanner;
/**
*
* @author Matthew
*/
public class Absences {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the date.");
int a = keyboard.next().charAt(0);
int[] mArray;
mArray = new int[32];
mArray[0] = 0;
mArray[1] = 1;
mArray[2] = 0;
mArray[3] = 3;
mArray[4] = 0;
mArray[5] = 2;
mArray[6] = 1;
mArray[7] = 0;
mArray[8] = 0;
mArray[9] = 0;
mArray[10] = 0;
mArray[11] = 0;
mArray[12] = 0;
mArray[13] = 0;
mArray[14] = 0;
mArray[15] = 0;
mArray[16] = 0;
mArray[17] = 0;
mArray[18] = 0;
mArray[19] = 0;
mArray[20] = 0;
mArray[21] = 0;
mArray[22] = 0;
mArray[23] = 0;
mArray[24] = 0;
mArray[25] = 0;
mArray[26] = 0;
mArray[27] = 0;
mArray[28] = 0;
mArray[29] = 0;
mArray[30] = 0;
mArray[31] = 2;
System.out.println("On the Date " + a + "has " + + " absences" );
首先,您可以使用数组列表声明数组元素,如下所示:
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 使您的程序崩溃。
System.out.println("On the Date " + a + "has " + mArray[a] + " absences" );
这是您问题的直接答案。 正如上一篇文章中所建议的,您应该执行边界测试。
我个人建议进行以下修改。 您可以简化数组的创建,您需要通过使用 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 天的月份。 在处理日期和时间时,我建议您查看 Calendar 或 Time 类。
编辑:我已经修改了我的代码,因为我忽略了一个事实,即您获取 int 输入的方法不起作用,正如 Preyas Shah 在他们的回答中正确指出的那样。
还有一件事。 以前的答案,数组边界检查似乎不错,应该可以解决问题。 然而,还有一件事。 您使用的方法:
int a = keyboard.next().charAt(0);
根据我的理解,它只会从字符串中获取第一个字符,比如如果输入的日期是“23”,则只需要“2”。 所以你从用户那里得到的所有索引值都只会是个位数。 我检查了 Java API,不确定这是否有用。
int a = keyboard.nextInt();
也请让我知道,我也在努力获得更好的理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.