繁体   English   中英

如何打印出数组位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM