質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

1251閲覧

javaプログラムのエラーについて.初心者です.(追記)

wwwmiyagi

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/01 22:46

編集2016/06/01 23:51

データ分割のプログラム

誤り訂正を行うプログラムを製作しているのですが,データの分割がうまくいきませんでした.
恐れ入りますが,どう直せばいいか教えてください.
public static void main(String[] args) {

int data = 01001101; int a[] = new int[8]; int i; for(i=7;i>=0;i--){ a[i] =data%10; System.out.println(+i+"番目の数は " +a[i] +" です. "); data = data/10;

}
}

データを後ろから一つずつ取り出してa[i]に格納したいのですが,
7番目の計算の結果は 1 です.
6番目の計算の結果は 2 です.
5番目の計算の結果は 7 です.
4番目の計算の結果は 2 です.
3番目の計算の結果は 6 です.
2番目の計算の結果は 2 です.
1番目の計算の結果は 0 です.
0番目の計算の結果は 0 です.
という結果が出てきてしまいます.

―以下,追記分―
皆様,ありがとうございます.最初が0で始まる場合は8進数になっていたのですね.最初を1にすれば正常に動作しました.
恐れ入りますが0から始まる場合も正常に動作させるためにはどうすればいいのでしょうか.
intからStringに変換したらうまくいくかとも思ったのですが,うまくいきませんでした.やはり1行目で自動的に8進数扱いになってしまうようです.解決策をご存知の方,よろしくお願いいたします.
public static void main(String[] args) {

int bigdata = 01001101; Integer value = bigdata; String data = String.valueOf(value); String[] result = new String[8]; int a[] = new int[8]; int i; for(i=7;i>=0;i--){ result[i] = String.valueOf(data.charAt(i)); a[i] =Integer.parseInt(result[i]); System.out.println(+i+"番目は " +a[i] +" です. ");; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

なぜ0始まりに固執するのかわかりませんが…
一旦数字を文字列リテラルとして入れて、それをparseIntすればどうでしょう?

java

1int data = Integer.parseInt("01001101");

ビット列を考えるというのなら他にも方法はあります。

java

1int data = 0b01001101; 2int[] a = new int[8]; 3for(int i = a.length - 1; i >= 0; i--) { 4 a[i] = data & 1; 5 System.out.println(+i+"番目の数は " +a[i] +" です. "); 6 data >>= 1; 7}

2進数としてリテラル数値を認識してもらい、ビットシフト。

投稿2016/06/02 01:32

編集2016/06/02 01:47
swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwwmiyagi

2016/06/02 01:35

ありがとうございました.解決いたしました. ビット列を分割するものでしたので,0始まりのデータを考える必要がありました.
swordone

2016/06/02 01:37

であれば、2進数扱いにして先頭に0bを付け、ビットシフトして処理すればいいのでは?
tkturbo

2016/06/02 02:25

parseInt(String expression, int radix)を使う方がいいかも。
guest

0

C言語では、数値の頭に"0"が付いていると8進数になります。java言語でもそうだったと記憶しています。

8進数の"01001101"は、10進数では"262721"になります。

int data = 1001101;
とすれば、10進数になりますので、目的通りの結果が得られると思います。

投稿2016/06/01 23:30

kiyohisa

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

0始まりの数値は8進数として処理されます。
先頭の0を削除してください。

投稿2016/06/01 23:31

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのまま答え書くのも何なので。

何か動きが想定と違うときは、各段階における各変数の中身を確認しましょう。
a,iは既に表示しているので、残るはdataぐらいです。

投稿2016/06/01 23:28

ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問