![](/img/trans.png)
[英]Is it possible to add int into the String ArrayList with out Converting int to String in java
[英]Java error when converting String in ArrayList to int
我在Java的非常新。 我正在嘗試編寫彩票模擬器。 我有以下代碼:
Scanner input = new Scanner(System.in);
System.out.println("Enter six whole numbers between 1 and 49 in a comma-separated list: ");
String userNumbersString = input.nextLine();
String[] userNumbersArray = userNumbersString.replaceAll("\\s+","").split(",");
ArrayList userNumbers = new ArrayList(Arrays.asList(userNumbersArray));
boolean validNumbers = true;
for(int v = 0; v <= 6; v++){
if((int)userNumbers.get(v) > 49){
validNumbers = false;
v = 7;
}else{
v++;
}
}
if(validNumbers == false){
String[] str = new String[0];
main(str);
}
它可以正確編譯。 但是,當我輸入一系列數字時,出現此錯誤:
java.lang.ClassCastException:無法將java.lang.String強制轉換為java.lang.Integer。
我對為什么不能將此字符串轉換為整數感到非常困惑。
抱歉,這是一個冗長的問題,但是我將不勝感激。
我剛剛意識到OutOfBounds異常是由於我的一個愚蠢的數學錯誤; v從0開始; 數組中有五個值,但是我給了for循環條件<=6。很抱歉。
謝謝大家的幫助。 在一起,您已經解決了我的問題。
簡單來說
int
是用於表示32位整數的原始類型。 String
是包裝在char
數組周圍以表示字符序列的引用類型。
您不能僅將類型從int
更改為String
並使String
的字符序列神奇地變為數字。
考慮一下如何實現此轉換。 您將查看每個字符,確保它是有效數字等。
更改:
if((int)userNumbers.get(v) > 49)
至:
if(Integer.parseInt(userNumbers.get(v)) > 49)
此外,在創建諸如ArrayList
泛型類型容器時,請確保您也出於類型安全性原因聲明了它們存儲的對象類型。
更改:
ArrayList userNumbers = new ArrayList(Arrays.asList(userNumbersArray));
至:
ArrayList<String> userNumbers = new ArrayList<String>(Arrays.asList(userNumbersArray));
這樣,您調用userNumber.get()
將返回String
。 如果您不放置它,它將返回一個Object
因此您實際上將調用Integer.parseInt(Object)
,這是無效的。 您將看到一個非常不言自明的錯誤,如下所示:
Integer類型的方法parseInt(String)不適用於參數(Object)
編輯:
對於您的IndexOutOfBounds
錯誤,您嘗試訪問的元素數量超出了您的限制。 基本上,您希望有6個值,但是您的for
循環表示from 0 until 6 (included)
。 共7個元素: 0, 1, 2, 3, 4, 5, 6
您可以通過改變解決這個問題<= 6
至< 6
在你的循環,但解決它,所以它會工作,不管你有多少個元素有就是用最好的方式size()
的財產ArrayList
:
更改:
for(int v = 0; v <= 6; v++)
至:
for(int v = 0; v < userNumbers.size(); v++)
首先,您應該對ArrayList
使用泛型。 請更換
ArrayList userNumbers = new ArrayList(Arrays.asList(userNumbersArray));
同
ArrayList<String> userNumbers = new ArrayList<>(Arrays.asList(userNumbersArray));
但是,這不是您的問題。 這里的誤解是強制轉換會推斷出您需要哪種類型的轉化; 不會的 。 用Integer.parseInt(userNumbers.get(v))
替換(int)userNumbers.get(v)
以從String
解析int
。
類型轉換並不意味着從字符串中解析Integervalue。
您應該為此使用Integer.parseInt 。
if(Integer.parseInt(userNumbers.get(v)) > 49
應該可以解決您的錯誤。
首先,由於for循環中<= 6,您將獲得ArrayIndexOutOfBounds異常。
其次,您應該使用Integer.parseInt(String intStr)方法將每個數字轉換為與int等效的數字。
這是我認為可行的精簡版本:
public static void main(String[] args)
{
String testInputOne = "14,22,18,2,5,11";
boolean allNumbersAreValid = true;
String[] userNumbersStrArray = testInputOne.split(",");
for (String numberStr: userNumbersStrArray)
{
Integer number = Integer.parseInt(numberStr.trim());
if (number > 49)
{
allNumbersAreValid = false;
break;
}
}
System.out.println("Testing " + testInputOne + ": " + (allNumbersAreValid?"All valid!":"At least one invalid"));
}
如果要進一步防止輸入錯誤(例如有人輸入字母字符),可以將Integer.parseInt調用包裝在try catch塊中,並捕獲NumberFormatException並輸出適當的錯誤消息。
坦率地說,我對遞歸調用main應該做什么感到有些恐懼? :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.