## 一、在没有方法存在的时候(只在main函数内)
字符串的不变性,是说这个字符串本身是不会改变的,它存储在一个内存空间中。【以x为String变量名】而同一个的指向地址是可以改变的,也就是说没有改变字符串本身,而是让x又指向另一个地址(你给x新赋值的地址,这里面是你新开辟的内存空间放的内容)二、在有方法存在的时候
1、方法没有返回值想通过方法改变字符串的内容【不可能】
因为方法给它重新指向了一个地址,但是它没有返回(return)值,无法出方法的作用域,也就不能把新地址给出来
2、方法有返回值
通过方法改变字符串的内容【可行】
因为它新的到的地址可以通过反回(return),来让main函数中(或者其他方法)接收到新的指向地址,也就可以通过新地址,而得到新的内容
#双色球问题【经典算法之一(递归)】
一、自己写的有问题的代码【在第二层循环判断数组这次录入的值是否有重复值的时候,判断出来就(i--,break;)了,[但是问题出现了],break只跳出了内层循环,还是给下面赋值了,这个时候是把前面的已经存在的最后一个数替换了,这样如果第一个数等于第三次进入循环产生的数的时候第三个数跳出循环把第二个数挤掉了,这样 数组中就有了重复的数字】,代码如下: int randomArray[]=new int[6];
int userArray[]=new int[6];
for(int i=0;i<randomArray.length;i++){
int randomNumber=rand.nextInt(33)+1;
for(int j=0;j<i;j++){
if(randomArray[j]==randomNumber){
i--;
break;
}
}
randomArray[i]=randomNumber;
}
二、正确的方法【谨记】
一般这种判断存在的问题,都需要一个boolean来实现。
所以这个题要在循环外定义一个boolean值,如果判定有重复则在内层循环中给它一个true(外面定义为false,反之也可以)并在之后braek(减少不必要的运算),在最外层循环中判断,如果存在相同,i--,并紧跟continue;判断语句之下录入数字,核心代码如下:
-----外面还有一层for循环就不在写入----
boolean result=false;
for(int j=0;j<i;j++){
if(userArray[i]==userArray[j]){
result=true;
break;//减少不必要的运算量
}
}
if(result){
i--;
continue;
}
}