这段程序中, 数组为什么不能颠倒数值呢?

wxfJordan 2006-05-25 10:14:23

以下是一数组值颠倒程序, 程序并不能. 请问错在哪里呢? 应该如何修改呢?

public class Test
{
public static void main(String[] args)
{
//赋值给一个数组.
int[] arr = new int[20];
int i = 0;
for (i = 0; i < 20; i++)
{
arr[i] = (i + 1) * 5;
}
//数组颠倒
int temp = 0;
i = 0;
int j = 19;
while (j >= 0)
{
temp = arr[i];
arr[i] = arr[j];

arr[j] = temp; //问题在这里, temp 为什么不能取得50以上的数呢?

System.out.println(temp + " " + j + " ");

i++;
j--;
}

for (i = 0; i <= 19; i++)
{
System.out.print(arr[i] + " ");
}
}
}
...全文
367 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsummer123 2006-05-31
  • 打赏
  • 举报
回复
学习
javabeginner2006 2006-05-31
  • 打赏
  • 举报
回复
把while中的条件改为j>i就行了,即while(j>i)
这样的条件比较通用,无论他的数组长度为多少(奇数个也行).
jinancf 2006-05-31
  • 打赏
  • 举报
回复
你循环的次数太多了,j=10的时候就完成交换了,再循环下去又换回来了
同意
wxfJordan 2006-05-31
  • 打赏
  • 举报
回复

请问有没有办法,可以做到循环10次以呢?

(请举例,谢谢!)
javabeginner2006 2006-05-30
  • 打赏
  • 举报
回复
原因只有一个:循环次数太多了,本来倒过了,又倒回来了.
现在解释一下你的疑问
1、j>=0 是数组没变化,而j>0是却是100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5,那是因为j>0的话,最后一次交换没做,所以只有100和5换了.
2 temp的值为什么不过50?因为当j循环到10时,所有个交换已经完成一遍了,temp的值是arr[i]的值,也就是从5到50.这时数组已经换好了,100-55是前十个数,而50-5是后十个数.继续循环,又开始交换,数组的值又被倒回来了,这时temp的值还是arr[i]的值(由于i从10-19,也就是arr[i]是后十个数),也就是从50-5,所以从头到尾temp的值始终不超过50...

Hmilyl 2006-05-29
  • 打赏
  • 举报
回复
交换10次就可以拉
TONYBLARED 2006-05-25
  • 打赏
  • 举报
回复
I just wanna doing sth difference.

public static void fun06(){
String[] arrs = {"are","bre","cre","dre","ere"};
List list = Arrays.asList(arrs);
Collections.reverse(list);
Object[] obj = list.toArray();
String[] arrsNew = (String[])list.toArray();
Conica.pl(arrsNew);
}
hnczzhen 2006-05-25
  • 打赏
  • 举报
回复
循环条件一换,j>0换成j>10就可以,如果j>0的话就交换了2次,换过去的值又被换回去了.
RainRainbow 2006-05-25
  • 打赏
  • 举报
回复
你循环的次数太多了,j=10的时候就完成交换了,再循环下去又换回来了
trumplet 2006-05-25
  • 打赏
  • 举报
回复
while (j >= 10) {
....
}
pyinjava 2006-05-25
  • 打赏
  • 举报
回复
for(i = 0;i<10;i++)
{
temp = arr[i];
arr[i] = arr[j];

arr[j] = temp; //问题在这里, temp 为什么不能取得50以上的数呢?

System.out.println(temp + " " + j + " ");

j--;
}
就可以了
trumplet 2006-05-25
  • 打赏
  • 举报
回复
wxfJordan(晓仕) ( ) 信誉:100 2006-05-25 14:25:00 得分: 0



不好意思上面的打错, 应该是:
temp: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5

arr[]: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

你没打错,循环条件换成 j>0 后, 显示如下,  

temp: 5 10 15 20 25 30 35 40 45 50 50 45 40 35 30 25 20 15 10
arr[]: 100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5

这是对的。
wcjmaomao 2006-05-25
  • 打赏
  • 举报
回复
同意RainRainbow的意见!
wxfJordan 2006-05-25
  • 打赏
  • 举报
回复

不好意思上面的打错, 应该是:

temp: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5

arr[]: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5


wxfJordan 2006-05-25
  • 打赏
  • 举报
回复

while (j > 0)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; //问题在这里, temp 为什么不能取得50以上的数呢?
System.out.print(temp + " ");
i++;
j--;
}

各位我把循环条件换成 j>0 后, 显示如下, 数组可以颠倒, 但是temp显示就不正确: 

temp: 5 10 15 20 25 30 35 40 45 50 50 45 40 35 30 25 20 15 10
arr[]: 100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5

请问怎样才能实现 temp 实现显示 如下情况呢? 

temp: 100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5



62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧