黑马程序员技术交流社区

标题: 求查错,总是提示“无法访问for(int j=0;arry[i]!=0;j++)” [打印本页]

作者: 王江涛    时间: 2014-5-9 13:12
标题: 求查错,总是提示“无法访问for(int j=0;arry[i]!=0;j++)”
本帖最后由 王江涛 于 2014-5-10 00:42 编辑
  1. /*
  2. 描述
  3. 请判断一个数是不是水仙花数。
  4. 其中水仙花数定义各个位数立方和等于它本身的三位数。

  5. 输入
  6. 有最多10组测试数据,每组测试数据以包含一个整数n(100<=n<1000)
  7. 输入0表示程序输入结束。

  8. 输出
  9. 如果n是水仙花数就输出Yes
  10. 否则输出No
  11. 样例输入:
  12. 153
  13. 154
  14. 0

  15. 样例输出:
  16. yes
  17. No

  18. */
  19. import java.util.Scanner;
  20. class Opr   //定义Opr类,用于验证水仙花数,真返回Yes,假返回No.
  21. {        String str=null;
  22.         public String cheak(int n)
  23.         {
  24.                
  25.                 int a=n/100;
  26.                 int b=(n-a*100)/10;
  27.                 int c=n-a*100-b*10;
  28.         if(n==a*a*a+b*b*b+c*c*c)
  29.                 str="Yes";
  30.         else
  31.                 str="No";
  32.         return str;
  33.         }
  34. }
  35. public class demo3
  36. {
  37.         public static void main(String args[])
  38.         {        int i=0;
  39.                 int arry[]=new int[10];    //定义并初始化数组,用于存放要验证的数
  40.                 Scanner scan=new Scanner(System.in);
  41.                 Opr op=new Opr();
  42.                 arry[i]=scan.nextInt();
  43.                 while(true)
  44.                 {
  45.                
  46.                 if(arry[i]==0)  //输入的数据等于0,则退出
  47.                 {
  48.                         System.exit(1);
  49.                 }
  50.                 else
  51.                         {
  52.                         i++;
  53.                         arry[i]=scan.nextInt();
  54.                         }
  55.                 }
  56.                 for(int j=0;arry[i]!=0;j++)
  57.                 {
  58.                 System.out.println(op.cheak(arry[j]));   //调用cheak方法,打印结果
  59.                 }
  60.         }
  61. }
复制代码

作者: 天外的星    时间: 2014-5-9 13:38
因为你的while循环条件一直是true,既然一直在循环,虚拟机在编译时会认为while循环之后的语句不会执行,只需要将条件用一个变量表示就行了

/*
描述
请判断一个数是不是水仙花数。
其中水仙花数定义各个位数立方和等于它本身的三位数。

输入
有最多10组测试数据,每组测试数据以包含一个整数n(100<=n<1000)
输入0表示程序输入结束。

输出
如果n是水仙花数就输出Yes
否则输出No
样例输入:
153
154
0

样例输出:
yes
No

*/
import java.util.Scanner;
class Opr   //定义Opr类,用于验证水仙花数,真返回Yes,假返回No.
{        String str=null;
        public String cheak(int n)
        {
               
                int a=n/100;
                int b=(n-a*100)/10;
                int c=n-a*100-b*10;
        if(n==a*a*a+b*b*b+c*c*c)
                str="Yes";
        else
                str="No";
        return str;
        }
}
public class Demo3
{
        public static void main(String args[])
        {        int i=0;
                int arry[]=new int[10];    //定义并初始化数组,用于存放要验证的数
                Scanner scan=new Scanner(System.in);
                Opr op=new Opr();
                arry=scan.nextInt();
                boolean b = true;
                while(b)
                {
               
                if(arry==0)  //输入的数据等于0,则退出
                {
                        System.exit(1);
                }
                else
                        {
                        i++;
                        arry=scan.nextInt();
                        }
                }
                for(int j=0;arry!=0;j++)
                {
                System.out.println(op.cheak(arry[j]));   //调用cheak方法,打印结果
                }
        }
}

作者: 天外的星    时间: 2014-5-9 15:12
这行代码 for(int j=0;arry[i]!=0;j++) 把arry[i]!=0改为arry[j]!=0 (i改为j)就行了

作者: 天外的星    时间: 2014-5-9 15:14
你的代码可以简化一下
  1. /*
  2. 描述
  3. 请判断一个数是不是水仙花数。
  4. 其中水仙花数定义各个位数立方和等于它本身的三位数。

  5. 输入
  6. 有最多10组测试数据,每组测试数据以包含一个整数n(100<=n<1000)
  7. 输入0表示程序输入结束。

  8. 输出
  9. 如果n是水仙花数就输出Yes
  10. 否则输出No
  11. 样例输入:
  12. 153
  13. 154
  14. 0

  15. 样例输出:
  16. yes
  17. No

  18. */
  19. import java.util.Scanner;

  20. class Opr // 定义Opr类,用于验证水仙花数,真返回Yes,假返回No.
  21. {
  22.         String str = null;

  23.         public String cheak(int n) {

  24.                 int a = n / 100;
  25.                 int b = (n - a * 100) / 10;
  26.                 int c = n - a * 100 - b * 10;
  27.                 if (n == a * a * a + b * b * b + c * c * c)
  28.                         str = "Yes";
  29.                 else
  30.                         str = "No";
  31.                 return str;
  32.         }
  33. }

  34. public class demo3 {
  35.         public static void main(String args[]) {
  36.                 int i = 0;
  37.                 int arry[] = new int[10]; // 定义并初始化数组,用于存放要验证的数
  38.                 Scanner scan = new Scanner(System.in);
  39.                 Opr op = new Opr();
  40.                 arry[i] = scan.nextInt();
  41.                 //从控制台不断录入数据,并存储起来
  42.                 while (arry[i] != 0) {
  43.                         arry[++i] = scan.nextInt();
  44.                 }
  45.                 int len = i;  //传了几个数进去
  46.                 //循环检测并打印
  47.                 for (i=0;i<len;i++) {
  48.                        System.out.println(op.cheak(arry[i])); // 调用cheak方法,打印结果 }
  49.                   }
  50.         }
  51.        
  52.           
  53. }
复制代码





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