cyx20142015 2015-05-24 02:26 采纳率: 0%
浏览 1603

java 新手问题 为什么c里总是0

package com.cyx.ex;
import java.util.Scanner;
public class Appea {

/**
 * @param args
 */
public static void main(String[] args) {

    System.out.println("请输入一个16位长整形数:");
    Scanner a = new Scanner(System.in);

    int i = 0;
    double d = 10;
    long b = a.nextLong();
    //String str = String.valueOf(b);

    int array[] = new int[10];
    for(;i < 16 ; i++){
    //int c = ((byte)str.charAt(i)) - 0x30;、
        int c = 0;
        for(double j = 15;j >= 1 ;j--){
            double e = 0;
            e = Math.pow(d, j);
            c = (int)b/(int)e;
            b = b % (long)e;
            System.out.println(c);
        switch(c){
        case 0:
            array[0]++;
            break;
        case 1:
            array[1]++;
            break;
        case 2:
            array[2]++;
            break;
        case 3:
            array[3]++;
            break;
        case 4:
            array[4]++;
            break;
        case 5:
            array[5]++;
            break;
        case 6:
            array[6]++;
            break;
        case 7:
            array[7]++;
            break;
        case 8:
            array[8]++;
            break;
        case 9:
            array[9]++;
            break;
        default:
            System.out.println("输入的数值非法 请重新输入!");
            break;
         }
        }
        for(i = 0;i < 11; i++){
            System.out.println("输入的数字中" + i + "出现的次数为:" + array[i]);
        }
    }

}

}

  • 写回答

10条回答 默认 最新

  • JonsonJiao 2015-05-24 03:13
    关注

    你把long和double强转为int是不对的,调试一下就会发现了c = (int)b/(int)e;这句是问题的关键。

    还有就是问问题的时候先说明你要干啥再贴程序,看了你最后一行才知道你要求一个16位数中各个数字出现的次数,哎。

    你的程序中写了两个for循环是多余的,一个循环就能搞定了。直接看下面的代码吧:

        public static void main(String[] args) {
            System.out.println("请输入一个16位长整形数:");
            Scanner a = new Scanner(System.in);
    
            long b = a.nextLong();
            int array[] = new int[10];
            for (int i = 0; i < 16; i++) {
                // 高位到低位依次遍历求商即可
                double e = Math.pow(10, 15 - i);
                int c = (int) (b / (long) e);
                switch (c) {
                case 0:
                    array[0]++;
                    break;
                case 1:
                    array[1]++;
                    break;
                case 2:
                    array[2]++;
                    break;
                case 3:
                    array[3]++;
                    break;
                case 4:
                    array[4]++;
                    break;
                case 5:
                    array[5]++;
                    break;
                case 6:
                    array[6]++;
                    break;
                case 7:
                    array[7]++;
                    break;
                case 8:
                    array[8]++;
                    break;
                case 9:
                    array[9]++;
                    break;
                default:
                    System.out.println("输入的数值非法 请重新输入!");
                    break;
                }
                // 修改b的值
                b = b % (long) e;
            }
            for (int i = 0; i < 10; i++) {
                System.out.println("输入的数字中" + i + "出现的次数为:" + array[i]);
            }
        }    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大