为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中,为什么我不能从超过 255 的十进制数中获取 9 个字符?是符号位吗?

在 Java 中,为什么我不能从超过 255 的十进制数中获取 9 个字符?是符号位吗?

泛舟湖上清波郎朗 2021-12-18 15:48:34
这是针对 headtails java 作业分配的,您可以在网上找到一些地方(例如http://www.javaproblems.com/2013/01/medium-problem-tricky-heads-and-tails.html)这个想法是输入一个十进制 0 到 511 并让它输出一个 3 x 3 的 H 或 T 矩阵,用于 0 或 1(我的作品是 0 到 255)这是我的尝试,但我无法开始工作:public static void main(String[] args) {    @SuppressWarnings("resource")    Scanner keyboard = new Scanner(System.in);    //System.out.println("Please enter a number between 0 and 511: ");    //int num = keyboard.nextInt();    int num = 458;    String binNum = "";    int temp;    String[][] coinArr = new String[3][3]; // = [][];    while(num > 0)    {        temp = (int) (num % 2);        binNum = binNum + "" + temp;        num = (int) (num / 2);    }    System.out.println("binNum length is " + binNum.length());    System.out.println("binNum is " + binNum);    binNum = String.format((binNum.length() < 9 ? ("%0"+ (9 - binNum.length())+"d%s") : "%0$d%s"), 0 ,binNum);    System.out.println("binNum length is " + binNum.length());    System.out.println("binNum is " + binNum);    int k=0;    for(int i = 0; i < 3; i++) {        for (int j = 0; j < 3; j++) {            binNum = binNum.replaceAll("0", "H");            binNum = binNum.replaceAll("1", "T");            coinArr[i][j] = binNum.substring(k, k+1);            k++;            System.out.print(coinArr[i][j]);        }        System.out.println();    }}
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您从十进制到二进制的转换是错误的,正确的是:


while(num > 0)

{

    temp = (int) (num % 2);

    binNum = temp + "" + binNum;

    num = (int) (num / 2);

}

那么你的 binNum 只需要 9 个字符:


binNum = binNum.length() < 9 ? String.format("%0"+ (9 - binNum.length())+"d%s", 0 ,binNum) : binNum;


// You don't need this inside your loop

binNum = binNum.replaceAll("0", "H");

binNum = binNum.replaceAll("1", "T");


int k=0;

for(int i = 0; i < 3; i++) {

    for (int j = 0; j < 3; j++) {

        coinArr[i][j] = String.valueOf(binNum.charAt(k));

        k++;

        System.out.print(coinArr[i][j]);

    }

    System.out.println();

}


查看完整回答
反对 回复 2021-12-18
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

有2个问题:-

1) 改变

binNum = binNum + "" + temp;

binNum = temp + binNum;

2) 改变

binNum = String.format((binNum.length() < 9 ? ("%0"+ (9 - binNum.length())+"d%s") : "%0$d%s"), 0 ,binNum);

binNum = String.format("%09d", Integer.parseInt(binNum));


查看完整回答
反对 回复 2021-12-18
  • 2 回答
  • 0 关注
  • 231 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号