2015-09-26 104 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)。

时代确实有所不同,但可以肯定地说,我的方法不仅更短,而且速度也与旧方式一样快。