2010-02-08 106 views
1

供參考:這是一個練習作業練習。我一直在努力,但現在我卡住了。任何提示/幫助將不勝感激。我一直在盯着它,並沒有取得任何進展。二進制字符矩陣幫助

總結的問題: 九個硬幣放置在3x3矩陣中,有些面朝上,有些面朝下。頭= 0和尾= 1.每個狀態也可以用二進制數表示。有512種可能性。問題:寫一個程序要求用戶對應,字符H和T這樣矩陣0-511和顯示器之間的數字:

用戶輸入數7(其爲000000111或HHHHHHTTT) 顯示應該是: HHH HHH TTT

這是我到目前爲止。我不是一定要回答這個問題的,我只是想朝着正確的方向努力。感謝

import java.util.Scanner; 

public class converting { 
    public static void main(String[] ar) { 

    Scanner s = new Scanner(System.in); 

     System.out.print("Enter a number between 0 and 511: "); 

     int number = s.nextInt(); 
     if(number <= 511 && number > 0) 
     { 
      String bin = Integer.toBinaryString(number); 
      String tails = bin.replace('1', 'T'); 

     int count = 0; 
     char[] arr = tails.toCharArray(); 

     for (int i = 0; i < arr.length; i++) { 

      System.out.print(arr[i]); 
      count++; 
      if (count == 3) { 
       System.out.println(); 
       count = 0; 
      } 
     } 
     } 
     else{ 
     System.out.print("Please enter a number between 0 and 511\n"); 
    } 
    } 
} 

回答

1

intToString.toCharArray();

這應該是bin.toCharArray(),methinks。

你還有什麼問題嗎?

1

String.replace(CharSequence, CharSequence)可能對您有用。

4

你真的很接近。一些注意事項:

  • Scanner#nextInt可以拋出異常;優雅地處理它們。
  • 您需要檢查number是否在範圍內(0-511)。
  • 一旦你有bin,你有1-9個二進制數字 - 0 s和1 s。你要確保你有9個,所以在前面插入任何缺失的0
  • 您現在有9 0 s和1 s;你想要H s和T s。退房String#replace
  • 您現在有一個字符串,其中包含9 H s和T s。輸出三行,每行三個字符。退房String#substring
+0

感謝您的回答。如果(number <= 511 && number> 0),我添加了有效數字 的檢查。 我也嘗試使用替換,我得到它的T: 字符串尾巴= bin.replace('1','T'); 我現在的問題是如何用0替換所有的F。我的char數組目前是char [] arr = tails.toCharArray();只有被替換的1。那有意義嗎? 有沒有辦法用我現在的代碼更新我的第一篇文章? – relyt 2010-02-09 00:39:02

+0

好的。更新第一篇文章。謝謝! – relyt 2010-02-09 00:53:00

+0

@relyt:不應該''0'是'> = 0'嗎?或者是用戶不允許擁有一個全是「H」的電路板? – 2010-02-09 04:59:50

1

  • 我會使用StringBuilder建立起來的「板」,只有打印出來之後。
  • 我會創建一個名爲「createBoard」的方法,它具有數字,寬度和深度作爲參數。始終爲靈活性編程。
  • 我會使用兩個計數器,比如x和y來遍歷寬度和深度(下一個循環就足夠了)。 position = x * width + y
  • 我會使用BigInteger.valueOf()並使用BigInteger.testBit(position)。
  • 我會確保我的代碼看起來不錯,並有評論。
  • +0

    馬爾滕,我敢肯定這可能是一個很好的方法,但在這一點上,我認爲它已經過了我的腦海。隨着我學到更多,這對我來說可能是有意義的。謝謝你的迴應。 – relyt 2010-02-09 00:40:19