黑马程序员技术交流社区

标题: 运行错误,求解惑…… [打印本页]

作者: 高亮亮    时间: 2013-12-10 07:58
标题: 运行错误,求解惑……
本帖最后由 高亮亮 于 2013-12-10 20:51 编辑
  1. /*
  2. 需求:小于8的整数。先倒序,然后每位数字加上5,在用和除10的余数代替该数字。最后将第一位最后一位互换。
  3. 请任意指定一个小雨8的整数,并将加密后结果打印。
  4. 思路:
  5. 用数组存储每位上的数字,并倒序。
  6. 每位数字进行加,取模操作,并更新数组中元素。
  7. 对数组中首,尾元素互换。
  8. 遍历数组元素输出。
  9. */
  10. import java.util.*;
  11. class JiaMi
  12. {
  13.         public static void jiaMi(int num)
  14.         {//用数组存储每位上的数字,并倒序。
  15.                 int[] arr=new int[8];
  16.                 int index=0;
  17.                 System.out.print("您输入的原始密码为:"+num);
  18.                 while (num>0)
  19.                 {
  20.                 arr[index++]=num%10;
  21.                         //arr[index]=num%10;   //为什么这里如果我将索引里面做成自加,在输入8位
  22.                         //index+=1;             <span class="Apple-tab-span" style="white-space:pre">        </span>//数是会报索引越界的错误?他们不应该完全是一个意思?
  23.                 num/=10;
  24.                 }//每位数字进行加,取模操作,并更新数组中元素。
  25.                 for (int i=0;i<index;i++)
  26.                 {
  27.                         arr[i]+=5;
  28.                         arr[i]%=10;
  29.                 }//对数组中首,尾元素互换。
  30.                 arr[0]=arr[0]^arr[index-1];
  31.                 arr[index-1]=arr[0]^arr[index-1];
  32.                 arr[0]=arr[0]^arr[index-1];               
  33.                 System.out.print("\n加密后密码为:");
  34.                 for (int i=0;i<index;i++)//遍历数组元素并输出。
  35.                 {
  36.                         System.out.print(arr[i]);
  37.                 }
  38.         }
  39.         public static void main(String[] args)
  40.         {
  41.                 Scanner in=new Scanner(System.in);
  42.                 while (true)
  43.                 {
  44.                         System.out.println("请输入原始小于八位密码:");
  45.                         int num=in.nextInt();
  46.                         jiaMi(num);
  47.                         System.out.println("\n"+"是否继续?任意键继续,1:退出");
  48.                         int x=in.nextInt();
  49.                         if (x==1)
  50.                                 break;        
  51.                         continue;                                       
  52.                 }
  53.         }
  54. }
复制代码

==================================无视我======================================



如上面的代码,在循环里面录入这个不确定的数组时候,为什么我把i自加放入索引里面,在编译过后,运行时输入8位数就会报索引越界呢???


==================================无视我======================================

    感谢给位……果然,我晚上把里面的那个class删了,重编译,就可以了……不过我之前也是编译在运行啊,怎么会报错呢???java抽风了……估计。








作者: 高亮亮    时间: 2013-12-10 08:02
21,22行那里
作者: 翼展哈哈    时间: 2013-12-10 08:42
楼主您好
我将您的代码没有任何修改,在编译器上运行了一遍,运行时并没有报错。
我把我运行的结果贴给您吧:
请输入原始小于八位密码:
12345678
您输入的原始密码为:12345678
加密后密码为:62109873
是否继续?任意键继续,1:退出
如果楼主运行时还是会出现错误,建议重启一下编译器或者删除原来的源代码,再写一个同样的源代码,再编译运行一下看看会怎样。
希望可以帮到楼主,有什么说的不对的,欢迎批评指正!
作者: 范二青年    时间: 2013-12-10 12:28
楼主你好,首先从题目来看,是小于8的整数还是小于8位的整数?这个问题比较模糊
姑且算作小于8位的整数吧
如果我输入1234567按照题目先倒序,然后每位数字加上5,在用和除10的余数代替该数字
第一步 倒序  7654321
第二部 每位数字加5   12 11 10 9 8 7 6
第三部 在用和除10的余数代替该数字   2 1 0 9 8 7 6
但是你的结果输出的是6109872

这是我的理解 你可以看一下  还有就是你说报错的问题   我想楼上是正解  

作者: 笑脸不在    时间: 2013-12-10 17:44
回楼主:复制代码运行时没问题:结果可预想的一致;此点同意3楼哈
楼上请看楼主的需求:最后将首位和最后一位互换位置
想补充的是:楼主的需求是小于八位的整数,那么在定义存储数组的时候就应该定义一个7位的数组
                int[] arr=new int[7];//将8改成7
望楼主采纳




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