簡體   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