[英]Can someone explain how this code works? (StringBuffer & StringTokenizer)
[英]Can someone explain how this left rotating array code works?
我正在嘗試學習有關數組以及如何旋轉數組的更多信息。 我偶然發現了一個代碼,試圖找出它如何正確打印出旋轉。
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
int n = sc.nextInt();
int d = sc.nextInt();
int arr [] = new int [n];
for (int i = 0; i < n; i++)
{
arr [i] = sc.nextInt();
}
for (int i = 0; i < n; i++)
{
System.out.print (arr [(i + d) % n] + " ");
}
}
我曾嘗試自己做數學運算,以查看其工作原理,但它並沒有加起來,我不確定自己做錯了什么。 n是數組中整數的數字,d是轉數。
等式為:(i + d)%n,n = 5,d = 4,數組為{1,2,3,4,5}
它打印出的答案是5 1 2 3 4,這是正確的,但是根據我的計算,它應該打印為1 2 3 45。我是如何得到的是,根據以下計算,它說1應該去索引0、2應該轉到索引1,以此類推...如果你們可以幫助解釋代碼的工作原理,將不勝感激。
這里,
for (int i = 0; i < n; i++)
{
System.out.print (arr [(i + d) % n] + " ");
}
該數組將從0開始,因為在for循環中,您將i設置為0。因此它將從0開始至4。
(0 + 4) % 5 = 4 % 5 = 5
(1 + 4) % 5 = 5 % 5 = 1
(2 + 4) % 5 = 6 % 5 = 2
(3 + 4) % 5 = 7 % 5 = 3
(4 + 4) % 5 = 8 % 5 = 4
首先,您收集內容為{1,2,3,4,5}
數組,這意味着您有5個具有詳細信息的索引:
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
然后,您希望將每個索引內容添加到值d
然后將模數%
添加到值n
。
您的第二次迭代有什么問題?
for (int i = 0; i < n; i++){
System.out.print (arr [(i + d) % n] + " ");
}
如果打印此(i + d)% n
,它將產生以下結果:
(0 + 4) % 5 = 4
(1 + 4) % 5 = 0
(2 + 4) % 5 = 1
(3 + 4) % 5 = 2
(4 + 4) % 5 = 3
因此,使用此命令:
System.out.print (arr [(i + d) % n] + " ");
實際上,您正在打印:
arr[4]
arr[0]
arr[1]
arr[2]
arr[3]
因此,如果您想要所需的結果,請使用以下代碼通過保留數組的每個索引的值來更改第二次迭代:
for (int i = 0; i < n; i++){
arr[i] = (arr[i] + d) % n;
System.out.print(arr[i] + " ");
}
這將打印0 1 2 3 4
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.