簡體   English   中英

打印數字系列 1,n,2,n-1,3,n-2,... 系列的邏輯應該是 1 到 n(給定的輸入)

[英]logic to print a number series 1,n,2,n-1,3,n-2,... series should be 1 to n(the input given)

我正在嘗試基本編程,但遇到了這個問題。 我有一個返回類型為字符串的函數,它接受一個整數輸入並且必須打印提到的系列。 這就是我所做的。

String s=new String("h");
int[] a=new int[n];
int k=1;
for(int i=0;i<n;i+=2)
{
  a[i]=b;//line6
  a[i+1]=n-(b-1);//line7
  b++;
} 
s=Arrays.toString(a);
return s;

當我輸入“偶數”時。 像 4. 我得到了正確的結果 [1,4,2,3]。

但是當我輸入“奇數”時沒有。 像 5. 我得到一個 ArrayOutOfBoundException

我知道我在第 6 行和第 7 行哪里出錯了,但我不知道如何相應地修改它。

我還希望將字符串返回為 1 n 2 n-1 3 n-2 ... 而不是 [1,n,2,n-1,3,n-2,..]

那是因為您有一個從i = 0i < n運行的循環,並且您正在嘗試訪問a[i + 1] 這在偶數上運行良好,因為您每次都增加2 ,最后一次迭代檢查a[n - 2]a[n - 1]

然而, ArrayIndexOutOfBoundException發生在奇數上,因為最后一次迭代嘗試訪問a[n - 1]a[n]

修改循環的一種方法是僅增加1 ,並通過檢查循環內i的奇偶校驗來設置a[i]的值:

for(int i = 0; i < n; i++, b++) {
    a[i] = (i % 2 == 0)? b: (n - (b - 1));
} 

考慮下一個方法:

for(int i=0;i<n/2;i++)
{
   a[2*i] = i+1;
   a[2*i+1] = n-i;
} 
if (n&1==1)  //how to check for oddity in Java?
  a[n-1] = (n+1)/2

你的循環內部應該看起來像

a[i] = b;
if (i + 1 < n) { // check the bounds before writing at i+1
    a[i + 1] = n - (b - 1);
}
b++;

其原因是,具有奇數時(例如,5) i得到成為4在循環的最后一次迭代,4是小於5,因此該代碼進入循環,然后訪問a在索引4 ,這是好的,但是隨后您嘗試在4+1訪問它,即5 ,但該數組沒有索引 5 因為。

將問題分解為兩個較小的問題:

為偶數索引生成所有值

for(int i = 0; i < a.length; i += 2)
    a[i] = i + 1;

生成奇數事件的所有值

for(int i = 1; i < a.length; i += 2)
    a[i] = n - i / 2;

由於奇數的整數除法i / 2可以替代(i - 1) / 2

完整代碼

int[] a = new int[n];

for(int i = 0; i < a.length; i += 2)
    a[i] = i + 1;

for(int i = 1; i < a.length; i += 2)
    a[i] = n - i / 2;

return Arrays.toString(a);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM