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