黑马程序员技术交流社区

标题: 一个简单的小程序的疑问 [打印本页]

作者: 韩伟    时间: 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);
}
}
运行结果为:
    这个程序应该如何优化呢,请高手指点一下!

作者: 于星星    时间: 2012-7-24 10:33
  1. import java.io.*;
  2. import java.util.*;

  3. public class Demo3
  4. {
  5. public static void main(String []args) throws IOException
  6. {
  7.    BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
  8.    
  9.    String str =bf.readLine();
  10.    System.out.println("该数为"+str.length()+"位数!");
  11.    char [] temp = str.toCharArray();
  12.    char a;
  13.    for(int i=0,j=temp.length-1;i<j;i++,j--)
  14.    {
  15.     [color=Red]a = temp[i];
  16. [/color]   
  17. [color=Red]temp[i] = temp[j];[/color]
  18.     temp[j] = a;
  19.    }
  20.    System.out.println("逆序输出:"+temp.toString()) ;   //这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
  21.    System.out.println("逆序输出:"+Arrays.toString(temp)) ;
  22.    for(int i=0;i<temp.length;i++)
  23.       System.out.print(temp);
  24. }
  25. }
复制代码
首先楼主的代码有点问题,在我标红的地方你好好检查检查,不知道是你复制错了还是怎样。

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
一个字节数组怎么可以直接输出呢?
比需遍历输出才行的。
出错打印的怎么是哈希值,明明是地址。。
遍历输出你看看。
  1. public static void main(String[]args){
  2.          BufferedReader bf = new BufferedReader (new InputStreamReader(System.in));
  3.           
  4.           String str;
  5.         try {
  6.                 str = bf.readLine();
  7.                 System.out.println("该数为"+str.length()+"位数!");
  8.                   char [] temp = str.toCharArray();
  9.                   char a;
  10.                   for(int i=0,j=temp.length-1;i<j;i++,j--)
  11.                   {
  12.                    a = temp[i];
  13.                    temp[i] = temp[j];
  14.                    temp[j] = a;
  15.                   }
  16.                   System.out.print("逆序输出:");
  17.                   for(char item:temp){
  18.                   System.out.print(item);
  19.                   
  20.                   }  //这个输出的是个哈希值,下面那个输出的是个数组,为什么这两个不一样呢?
  21.                   System.out.println();
  22.                   System.out.println("逆序输出:"+Arrays.toString(temp)) ;
  23.                   for(int i=0;i<temp.length;i++)
  24.                      System.out.print(temp);
  25.         } catch (IOException e) {
  26.                 e.printStackTrace();
  27.         }
  28.           
  29. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2