黑马程序员技术交流社区
标题:
一个简单的小程序的疑问
[打印本页]
作者:
韩伟
时间:
2012-7-24 10:18
标题:
一个简单的小程序的疑问
题目:给一个不多于
5
位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
代码如下:
import java.io.*;
import java.util.*;
class Test18
{
public static void main(String []args) throws IOException
{
BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
String str =bf.readLine();
System.out.println("该数为"+str.length()+"位数!");
char [] temp = str.toCharArray();
char a;
for(int i=0,j=temp.length-1;i<j;i++,j--)
{
a = temp
;
temp
= temp[j];
temp[j] = a;
}
System.out.println("逆序输出:"+temp.toString()) ;
//这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
System.out.println("逆序输出:"+Arrays.toString(temp)) ;
for(int i=0;i<temp.length;i++)
System.out.print(temp
);
}
}
运行结果为:
QQ截图20120724101514.png
(1.88 KB, 下载次数: 46)
下载附件
2012-7-24 10:15 上传
这个程序应该如何优化呢,请高手指点一下!
作者:
于星星
时间:
2012-7-24 10:33
import java.io.*;
import java.util.*;
public class Demo3
{
public static void main(String []args) throws IOException
{
BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
String str =bf.readLine();
System.out.println("该数为"+str.length()+"位数!");
char [] temp = str.toCharArray();
char a;
for(int i=0,j=temp.length-1;i<j;i++,j--)
{
[color=Red]a = temp[i];
[/color]
[color=Red]temp[i] = temp[j];[/color]
temp[j] = a;
}
System.out.println("逆序输出:"+temp.toString()) ; //这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
System.out.println("逆序输出:"+Arrays.toString(temp)) ;
for(int i=0;i<temp.length;i++)
System.out.print(temp);
}
}
复制代码
首先楼主的代码有点问题,在我标红的地方你好好检查检查,不知道是你复制错了还是怎样。
System.out.println("逆序输出:"+temp.toString()) ; //这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
先来解决第一个问题,首先你申明的temp是一个数组,在栈和堆中就分别开辟了一块内存,而temp就保存在栈中,具体的数据放在堆中,其实temp就相当于一个记住了数组数据存放地址的指针,也可以看做是一个类的对象。当你打印一个类的对象,出现的肯定是它的地址。
System.out.println("逆序输出:"+Arrays.toString(temp)) ;
再看看第二个,你使用了工具类Arrays调用它的toString方法,在工具类里面,肯定重写了Object的toString方法。在工具类内部已经封装好了数组的具体表现形式。这就是用工具类的好处。希望对你有帮助。
作者:
龚建锋
时间:
2012-7-24 10:39
import java.io.*;
import java.util.*;
class Test18 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
System.out.println("该数为" + str.length() + "位数!");
char[] temp = str.toCharArray();
char a;
for (int i = 0, j = temp.length - 1; i < j; i++, j--) {
//这个地方像你那样写交换数组元素,编译运行不报错?
a = temp[i];
temp[i] = temp[j];
temp[j] = a;
}
System.out.println("逆序输出:" + temp.toString()); // 这个是temp变量在栈内存指向temp[]堆内存中的首地址值,在定义temp[]数组时,栈内存产生了一个temp变量,堆内存开辟了一个数组空间,并把数组首地址值传给栈变量temp。
System.out.println("逆序输出:" + Arrays.toString(temp));//这里输出的是temp[]数组的元素
for (int i = 0; i < temp.length; i++)
System.out.print(temp);
}
}
作者:
乐峰
时间:
2012-7-24 10:42
import java.io.*;
import java.util.*;
class Test18
{
public static void main(String []args) throws IOException
{
BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
String str =bf.readLine();
System.out.println("该数为"+str.length()+"位数!");
char [] temp = str.toCharArray();
char a;
for(int i=0,j=temp.length-1;i<j;i++,j--)
{
a = temp
;//这里要改一下
temp
= temp[j];
temp[j] = a;
}
System.out.println("逆序输出:"+temp.toString()) ; //因为该数组调用了父类的toString()的方法,所以返回的是该数组对象的内存地址。
System.out.println("逆序输出:"+Arrays.toString(temp)) ;//因为Arrays的toString(char[] a)方法覆盖了父类的toString()的方法,所以返回的是返回指定数组内容的字符串表示形式。
for(int i=0;i<temp.length;i++)
System.out.print(temp);
}
}
作者:
李东升
时间:
2012-7-24 10:44
一个字节数组怎么可以直接输出呢?
比需遍历输出才行的。
出错打印的怎么是哈希值,明明是地址。。
遍历输出你看看。
public static void main(String[]args){
BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
String str;
try {
str = bf.readLine();
System.out.println("该数为"+str.length()+"位数!");
char [] temp = str.toCharArray();
char a;
for(int i=0,j=temp.length-1;i<j;i++,j--)
{
a = temp[i];
temp[i] = temp[j];
temp[j] = a;
}
System.out.print("逆序输出:");
for(char item:temp){
System.out.print(item);
} //这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
System.out.println();
System.out.println("逆序输出:"+Arrays.toString(temp)) ;
for(int i=0;i<temp.length;i++)
System.out.print(temp);
} catch (IOException e) {
e.printStackTrace();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2