4 回答

TA貢獻1898條經驗 獲得超8個贊
我建議使用以下代碼:
public static List<Integer> getOdd(int l, int r) {
List<Integer> odd = new ArrayList<Integer>();
if (l % 2 == 0)
l++;
while(l <= r) {
odd.add(l);
l += 2;
}
return odd;
}

TA貢獻1712條經驗 獲得超3個贊
正如評論中提到的,您在循環中排除了,并且可能返回了錯誤的數據結構?r
此外,您的代碼所做的遠遠超出了它需要的
你只需要一個循環
你根本不需要 - 只需修改
tmp
l
你不需要所有的 if/else 塊
我建議如下:
static int[] oddNumbers(int l, int r) {
List<Integer> list1 = new ArrayList<>();
if (l % 2 == 0) l++;
for(; l <= r; l += 2) {
list1.add(l);
}
return list1.stream().mapToInt(i->i).toArray(); // https://stackoverflow.com/a/23945015/2554605
}
您可以根據挑戰要求添加回來是否需要它,但我不是說這是必要的(請注意,我有,而不僅僅是為了涵蓋這種情況)。if ((r >= l) && (l >= 1) && (r <= 100000))r >= lr > lr == l
同樣,如果您真的被允許返回而不是 ,那么就像您擁有的那樣。List<Integer>int[]return list1;

TA貢獻2012條經驗 獲得超12個贊
此版本應該可以正常工作
static List<int> oddNumbers(int l, int r)
{
List<int> list1 = new List<int>();
if ((r > l) && (l >= 1) && (r <= 100000))
{
int tmp = l % 2 == 0 ? l + 1 : l;
for (int i = tmp; i < r; i += 2)
{
list1.Add(i);
}
}
return list1;
}
添加回答
舉報