JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [問題]10進制轉16進制範例疑問
vul3xup699





發文: 4
積分: 0
於 2019-01-16 17:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
最近剛學到方法,看了以下的10進制轉16進制的範例,看不太懂它的代碼,有很多疑問

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
class Hextoten {
//16進制跟10進制之間的轉換  例如17在16進制為11  (除16 進1餘1 等於11)  餘數0-9為數字 10-15以ABCDE表示
  public static void main(String[] args) {
    //讓用戶輸入10進制數字
    //調用方法將用戶輸入的數字轉換成16進制
    System.out.println("請輸入一個整型數字");
    Scanner input = new Scanner(System.in);       
    int decNum = input.nextInt();                       //設定用戶輸入數字的變量decNum
    System.out.println(decToHex(decNum));  
  }
  //將decNum 10轉16進制
  public static String decToHex(int decNum) {
     String hex ="";                              //設定變量hex為 轉換好的16進位字符串
    while(decNum!=0) {
      int temp = decNum%16 ;                       //設變量temp為16的餘數
      //餘數可能是數字(0-9)或英文(10-15)
      if(temp<=9 && temp>=0) {                   //如果輸入數字的餘數介於0到9之間
        hex=temp+hex ;                           //每取一個餘數 就往前拼接
      }
      else if(temp>=10 && temp<=15) {         //如果輸入數字的餘數介於10到15之間
                                                            //先把數字轉為字符再拼接
        hex = (char)(temp%10+'A')+hex;    //hex為string型要轉為char型 
      }
      decNum = decNum/16;                           //求輸入數字的商
    }        
    return hex ;                                                   //將求出來的值傳回hex
  }

[1]請問這邊用while迴圈的思考邏輯是什麼?
[2]在執行if判斷的時候為什麼hex=temp+hex而不是hex=hex+temp ,顯示的結果餘數不是應該在後面嗎? 比如說輸入78顯示4E,E是餘數(在後面) ,但是如果代碼照我的想法寫的話顯示結果卻會變成E4

麻煩解惑 謝謝

補充一下我自己的寫法
思考邏輯是建立一個方法(change),設定一個含兩個值的字串變量(ans)
第一個值直接除16 , 第二個值則是建立0~E的陣列,利用餘16的結果找出輸入的值在陣列中的位置
最後在顯示出第一個值的變量+第二個值的變量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Scanner;
import java.util.concurrent.TimeUnit;
 
public class  practice2 {
 
  public static void main(String[] args) {
    System.out.println("key in a number");                           //輸入一組數字
    int input = new Scanner(System.in).nextInt() ;       
    System.out.println(change(input));                  //套用方法change(input)
  }
 
public static String change(int input){
  String ans="";                                            //設定轉換後的變量
int firstNum = input/16 ;                                        //第一個值變量
String[] secNum = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E"}; //第二個值變量
for (int i = 0; i < secNum.length; i++) {
  if(input%16!=0 &&input>16) {                          //如果輸入的值餘16不等於0,以及輸入的值大於16
    secNum[i] = secNum[input%16];                    //找出輸入的值餘16在陣列下標中的位置
    int index = i ;                                      
    ans = String.format("%s%s", firstNum,secNum[index]);
  }
  else if(input%16!=0 &&input<16) {                    //如果輸入的值餘16不等於0,以及輸入的值小於16
    secNum[i] = secNum[input%16];                    //找出輸入的值餘16在陣列下標中的位置
    int index = i ;                                      
    ans = String.format("%s%s", "",secNum[index]);      //第一個值不顯示,只顯示第二個值
  }
  else if(input==0 ) {                                    //如果輸入的值是0
     ans="0";                                            //答案為0  
  }  
}
return ans;
}
}


vul3xup699 edited on 2019-01-16 22:27
reply to postreply to post
作者 Re:[問題]10進制轉16進制範例疑問 [Re:vul3xup699]
javaX





發文: 188
積分: 0
於 2019-01-17 08:35 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
連結有說明取餘數或許容易懂
https://coolconversion.com/math/binary-octal-hexa-decimal/Convert_decimal__78_to_hexadecimal_


reply to postreply to post
教育部:要如何保證畢業即就業
經濟部:所以公司都是我開的
財政部:發前單位請不要幻想能春風化雨
行政院:為什麼該單位發錢的時候都想去當老師
作者 Re:[問題]10進制轉16進制範例疑問 [Re:javaX]
javaX





發文: 188
積分: 0
於 2019-01-20 05:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class DecimalToHexadecimal {
 
    public static void main(String[] args) {
        String[] hexadecimal = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E"};
        int number = 0;
        int remainder = 0;
        String output = "";
 
        while (number > 0) {
            remainder = number % 16;
            number = number / 16;
            output = hexadecimal[remainder] + output;
        }
        output = output.length() == 0 ? "0" : output;
        System.out.println(output);
 
    }
}


reply to postreply to post
教育部:要如何保證畢業即就業
經濟部:所以公司都是我開的
財政部:發前單位請不要幻想能春風化雨
行政院:為什麼該單位發錢的時候都想去當老師
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8