Как конвертировать в шестнадцатеричные, используя только циклы while и if-else - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно преобразовать данное число из десятичного в шестнадцатеричное, используя только циклы, указанные в заголовке.Значение нет для петель.Пока что все работает как преобразование 683. Он печатает 2AB без проблем, а 34821 печатает 8805. Проблема в том, что между двумя цифрами должно быть целое число.Например, я не могу конвертировать 31388 в 7A9C.У меня есть представление о моей проблеме, но я не знаю, как ее решить.

import java.util.Scanner;
public class Lab12abHexNumbersTEST
{
   public static void main(String[] args)
   {
     Scanner decimal = new Scanner(System.in);
     System.out.println("Enter a decimal number between 1 and 50,000: ");
     int num = decimal.nextInt();

     String hex1 = ""; 
     String letter = "";
     String hex3 = "";
     String hex_last = "";
     int dec = num;
     while (dec > 0)
     {
         hex1 = (dec % 16) + hex1;

         if(dec % 16 >= 9){
            hex1 = "";

            if(dec % 16 == 15) {
               letter = "F" + letter + hex1;
            } else if (dec % 16 == 14) {
               letter = "E" + letter + hex1;
            } else if (dec % 16 == 13) {
               letter = "D" + letter + hex1;
            } else if (dec % 16 == 12) {
               letter = "C" + letter + hex1;
            } else if (dec % 16 == 11) {
               letter = "B" + letter + hex1;
            } else if (dec % 16 == 10) {
               letter = "A" + letter + hex1;
            } 

            System.out.println(letter);
         }
         hex3 = hex1 + letter;

         dec = dec / 16;

      }

      hex_last = hex3; 
      System.out.println("The decimal number " + num + " in hexadecimal is " 
+ hex_last);
  }   
}  

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Если разрешены строковые функции:

import java.util.*;

public static void main(String[] args){
    int dec = 31388 ;
    String digits = "0123456789ABCEDF";
    StringBuilder hexString = new StringBuilder();

    while(dec != 0){
        hexString.insert(0, digits.indexOf(dec % 16));
        dec /= 16;
    }

    System.out.println(hexString);
}
0 голосов
/ 06 декабря 2018

Я предоставил решение этой проблемы.

Примечание. Я использовал операторы switch, чтобы сделать код чище, но я уверен, что вы знаете, как преобразовать их обратно в случаи if / else.Если вам нужна помощь, пожалуйста, спросите.

Примечание: я использовал StringBuilder вместо строк напрямую.Вы можете легко изменить их на строки, но я выбрал stringbuilder, потому что он делает код чище.

public static void main(String[] args) {
        int dec = 31388 ;
        StringBuilder hexString = new StringBuilder();

        while (dec != 0){
            int hexDigit = dec%16; // obtain this remainder
            dec /= 16; //update dec

            if (hexDigit < 10) hexString.insert(0, hexDigit);
            else {
                switch (hexDigit) {
                    case 10 :
                        hexString.insert(0, "A");
                        break;
                    case 11 :
                        hexString.insert(0, "B");
                        break;
                    case 12 :
                        hexString.insert(0, "C");
                        break;
                    case 13 :
                        hexString.insert(0, "D");
                        break;
                    case 14 :
                        hexString.insert(0, "E");
                        break;
                    case 15 :
                        hexString.insert(0, "F");
                        break;
                    default: break;
            }
        }
    } // while
    System.out.println(hexString);
}

Вывод: 7A9C

, преобразованный в блок if / else назапрос:

else {
            if (hexDigit == 10) {
                hexString.insert(0, "A");
            } else if (hexDigit == 11) {
                hexString.insert(0, "B");
            } else if (hexDigit == 12) {
                hexString.insert(0, "C");
            } else if (hexDigit == 13) {
                hexString.insert(0, "D");
            } else if (hexDigit == 14) {
                hexString.insert(0, "E");
            } else if (hexDigit == 15) {
                hexString.insert(0, "F");
            }
        }

Используя строки, решение:

public static void main(String[] args) {
    int dec = 31388;
    String answer = "";

    while (dec != 0){
        int hexDigit = dec%16; // obtain this remainder
        dec /= 16; //update dec

        if (hexDigit < 10) {
            answer = hexDigit + answer;
        }
        else {
            if (hexDigit == 10) {
                answer = "A" + answer;
            } else if (hexDigit == 11) {
                answer = "B" + answer;
            } else if (hexDigit == 12) {
                answer = "C" + answer;
            } else if (hexDigit == 13) {
                answer = "D" + answer;
            } else if (hexDigit == 14) {
                answer = "E" + answer;
            } else if (hexDigit == 15) {
                answer = "F" + answer;
            }
        }
    } // while
    System.out.println(answer);
}
...