我遇到了一個似乎無法解決的問題,而且我所做的所有搜索都與我遇到的問題并不完全相關,并且嘗試實施這些方法來解決我的問題仍然無效。我花了一個小時試圖找到另一個問題或在某處發帖,但似乎無法找到任何特定于我的問題(除非谷歌今天不想作業)。
我正在嘗試創建一個方法,該方法回傳 1 到 n 之間所有奇數的陣列,在本例中為 1 到 255。我嘗試了以下方法(這是當前的方法):
import java.util.Arrays;
public class BasicJava: {
public Integer[] arrayOfOdds() {
int n = 255;
Integer[] odds = new Integer[(n 1)/2];
for(int i = 1; i < n 1; i =2) {
odds[i/2] = i;
}
return odds;
}
}
主要方法:
import java.util.Arrays;
public class BasicJavaTest {
public static void main(String[] args) {
BasicJava test = new BasicJava();
System.out.println(Arrays.toString(test.arrayOfOdds()));
}
}
在切換到使用ArrayList(我更喜歡其他資料結構而不是陣列)并轉換為陣列并得到相同的輸出之前,我嘗試使用陣列來做同樣的事情(我只會把輸出陣列的一部分放在不使用空間太大):
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0, 25, 0, 27, 0, 29, 0, 31, 0]
我需要什么來解決這個問題?
如果我只想使用相同的 for 回圈和 if 陳述句列印 1 和 N 之間的所有賠率,我會得到正確的輸出。
謝謝
uj5u.com熱心網友回復:
您可以在不使用 ArrayList 的情況下以線性時間復雜度執行此操作。
您的最終輸出將始終有 n/2 個元素,因此您的陣列大小可以固定不變。在下一步中,您可以簡單地填充陣列中的值。
FYR代碼:
int[] arr = new int[((n 1)/2)];
for(int i = 0, e = 1; i < arr.length; e = 2, i ) {
arr[i] = e;
}
uj5u.com熱心網友回復:
您想從回圈開始,2因為每個只能被 1 整除的自然數本身都是素數。另外,2是第一個質數...
import java.util.*;
public class Main
{
public static Integer[] arrayOfOdds() {
ArrayList<Integer> odds = new ArrayList<>();
for(int i = 2; i < 256; i ) {
if(i%2==0) {
continue;
}
odds.add(i);
}
Integer[] res = new Integer[odds.size()];
res = odds.toArray(res);
return res;
}
public static void main(String[] args) {
Integer[] arr = arrayOfOdds();
System.out.print(Arrays.toString(arr));
}
}
下面是我的輸出:
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255]
uj5u.com熱心網友回復:
你可以這樣使用IntStream。
static int[] arrayOfOdds() {
return IntStream.iterate(1, i -> i 2)
.takeWhile(i -> i < 256)
.toArray();
}
public static void main(String[] args) {
System.out.println(Arrays.toString(arrayOfOdds()));
}
輸出:
[1, 3, 5, 7, 9, 11, 13, 15, ... , 251, 253, 255]
uj5u.com熱心網友回復:
int N = 255;
Integer[] array = new Integer[(N 1)/2];
for (int j = 1; j < N 1; j =2) {
array[j/2] = j;
}
System.out.println(Arrays.toString(array));
uj5u.com熱心網友回復:
您不需要添加條件來檢查每個整數。
這是創建賠率數的簡單技巧:
從 1 開始并為下一個元素增加 2。( 1,3,5...)
public static void main(String[] args) {
List<Integer> arr = getOddList(255);
System.out.print(arr);
}
private static List<Integer> getOddList(int n) {
List<Integer> nums = new ArrayList<>();
for (int i = 1; i < n; i = i 2) {
nums.add(i);
}
return nums;
}
//輸出 [1, 3, 5, 7, 9, 11...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372537.html
標籤:爪哇
