2015-09-26 60 views
-3

我:交換價值

String a1 = "Hello"; 
String a2 = "World"; 

我想a2 becomes a1a1 becomes a2即他們交換價值。

否則無需編寫一個函數:

a1 = "World"; 
a2 = "Hello"; 

要編寫能夠做到在迭代的最小數量的功能。

+3

根本不需要迭代。你根本就不需要這個循環。你的意思是*說明*? –

+6

在'tmp'中存儲'a1'。指定'a1 = a2'。分配'a2 = tmp'。這是標準['swap'操作](https://en.wikipedia.org/wiki/Swap_(computer_science)#Using_a_temporary_variable)。 –

+0

爲什麼@Amila不能看到我試過的東西?爲什麼鮑里斯不能在答案框中編寫解決方案?爲什麼安迪不明白這些意義?爲什麼downvoters不關心評論? – paul

回答

3

由於String是不可改變的在Java中, 你不能改變的a1a2, 的價值,問題是相當混亂。

你可以做的是交換的變量:

String tmp = a1; 
a1 = a2; 
a2 = tmp; 

但我懷疑這是一個鍛鍊,也許它的目的更多的是這樣的:

鑑於char[] a1 = {"h", "e", "l", "l", "o"}char[] a2 = ...,交換他們值的最小步數而不重新分配這些變量。

然後,您將迭代數組的元素 並按照字符執行交換操作,就像我之前在字符串中執行的操作一樣。

-2

這裏是一個解決方案:

a1 += a2;  
a2 = a1.replaceFirst(a2 + "$", ""); 
a1 = a1.replaceFirst("^" + a2, ""); 
0

這裏的另一種方式:

x = new String[] { y, y = x }[0]; 

我測試了它,和它一樣快,因爲其他的方法。看看:

data <- read.csv("~swapVars.csv") 

dim(data)[1] #Size of dataset 
# [1] 3799582 

head(data) # Preview of data (Nano Seconds) 
# oldWay newWay 
# 1  75  75 
# 2  82  83 
# 3  67  67 
# 4  75  67 
# 5  98  60 
# 6  75  75 

summary(data) 
# oldWay    newWay  
# Min. :  52 Min. :  52 
# 1st Qu.:  60 1st Qu.:  60 
# Median :  60 Median :  60 
# Mean :  84 Mean :  78 
# 3rd Qu.:  67 3rd Qu.:  67 
# Max. :16032716 Max. :8381087 

t.test(data$oldWay, data$newWay) 

# Welch Two Sample t-test 
# 
# data: data$oldWay and data$newWay 
# t = 0.7796, df = 7237880, p-value = 0.4356 
# alternative hypothesis: true difference in means is not equal to 0 
# 95 percent confidence interval: 
# -9.516198 22.087260 
# sample estimates: 
# mean of x mean of y 
# 83.96287 77.67734 

那麼這是什麼意思呢,我測試了兩種方法3,799,582次隨機放置和隨機文本消除第三個變量。然後我對這兩個數據集進行了t檢驗,發現我的方式或舊方式之間沒有顯着差異,關於時間延遲(Nano Seconds)。

時代確實有所不同,但可以肯定地說,我的方法不僅更短,而且速度也與舊方式一樣快。