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

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

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

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

Q&A

解決済

5回答

282閲覧

実行結果があいません。どこを直したらよいか教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/04/10 13:10

9進数のものを3進数にするプログラムです。これまでいただいたアドバイスをもとに自分のレベルでできるくらいのものをつくってみましたが実行結果があいません。
10進数のところで表示したところまずそこが違うので9進数から10進数にするところが間違っているのだと思います。どこを直したらよいか教えてください。

import

1public class kadai3_1{ 2 public static void main(String[] args)throws IOException{ 3 4 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 5 System.out.print("9進数"+" "); 6 String sinsu=br.readLine(); 7 char a; int b=0; int c=0; String d=" "; int k=0; 8 int sinsu1[]=new int[sinsu.length()]; int s=0; 9 int sinsu2[]=new int [1000]; 10 11 for(int i=0;i<sinsu.length();i++){ 12 sinsu1[i]=sinsu.charAt(i); 13 if(sinsu1[i]==9){ 14 System.out.println("9進数ではない"); 15 break; 16 } 17 } 18 19 for(int j=sinsu.length()-1;j>=0;j--){ 20 double kaijyou=Math.pow(9,k); 21 22 b+=sinsu1[j]*kaijyou; 23 k++; 24 } 25 System.out.println(b); 26 27 28 while(b>=3){ 29 c=b%3; 30 b=b/3; 31 sinsu2[s]=c; 32 s++; 33 } 34 sinsu2[s]=b; 35 for(int y=s;y>=0;y--){ 36 System.out.print(sinsu2[y]); 37 } 38 39 } 40} 41 42コード

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

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

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

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

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

guest

回答5

0

この質問に対しては禁じ手かもしれないが

java

1int i = Integer.parseInt(sinsu, 9); 2String result = Integer.toString(i, 3);

投稿2018/04/11 02:50

swordone

総合スコア20651

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

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

maisumakun

2018/04/11 02:53

「自分で作らずに既存のライブラリ(特に標準ライブラリで存在すればなお良い)を使い倒せる」というのも、立派な能力の1つだとは思います。 # 自分自身、必死で書いたコードが使用中のライブラリに存在したことにあとから気づいて微妙な気分になったこともあります
abs123

2018/04/11 10:16

文字列から文字列の変換であればこっちのほうがよさそう BigInteger(String val, int radix) -> BigInteger#toString(int radix)
退会済みユーザー

退会済みユーザー

2018/04/11 11:14

そんな方法もあったんですね! ありがとうございます!
guest

0

一般的に使える方法ではありませんが、9は3の2乗なので、いちいち10進法に変換しなくても、9進法の1桁を3進法の2桁に変換すれば、だいぶ楽に処理が進むのではないかと思います。

投稿2018/04/10 23:26

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 11:13

やってみます! ありがとうございます!
guest

0

以下の部分、これだと入力された「文字列」を1桁ずつ分解してsinsu1[]に入れることになりますが、ここで入るのは「文字コード」であり数値ではありません。「1」と入力したなら、「1」を表す文字コードである49(0x31)が入ることでしょう。これをその先の計算で用いているから合わないのでしょう。

Java

1 for(int i=0;i<sinsu.length();i++){ 2 sinsu1[i]=sinsu.charAt(i); 3 if(sinsu1[i]==9){ 4 System.out.println("9進数ではない"); 5 break; 6 } 7 } 8

次のように改めてみては?

Java

1 sinsu1[i]=Character.digit(sinsu.charAt(i), 10);

投稿2018/04/10 13:44

編集2018/04/10 13:48
keicha_hrs

総合スコア6768

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 11:12

わかりました! ありがとうございます!
guest

0

ベストアンサー

おはようございます。いろいろ訂正させてください。
1.

Java

1sinsu1[i]=sinsu.charAt(i); 2

左辺はint型に対して右辺はchar型になっているため正しい値が代入されてないと考えられます。
char型をint型に変換するときは

Java

1sinsu1[i] = Character.getNumericValue(sinsu.charAt(i));

という方法があります。

2.入力した値の位に少なくとも1つ9がある場合は9進数ではないと表示していますが
9進数でない場合も3進数に変換する処理を行っているのはおかしいですよね?
if文を用いて9進数ではないときは3進数に変換する処理をしないようにすべきだと思います。
(以前の質問のところで私が回答したものを参考にしてください。)

<追記>
もっと簡単な方法がありました。

Java

1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 String line = sc.nextLine(); 7 int i = Integer.parseInt(line, 9); //9進数に変換 8 String result = Integer.toString(i, 3); //3進数に変換 9 10 System.out.println(result); 11 } 12}

こっちのほうがすっきりしてますね。
参考にしたサイト->Javaで進数変換を行う方法

投稿2018/04/10 23:16

編集2018/04/11 03:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 11:13

わかりました! ありがとうございます!
guest

0

次のように、デバッグのための print 文を入れて実行してみました。(22 行目, 23 行目)

イメージ説明

charAt(i) と sinnsu1[i] が異なっています。
他の回答にあるように、
charAt(0) は 文字の '1'
sonsu1[0] 文字 '1' のアスキーコード値 49 になっています。
sousu1[0] に 1 をいれたいのですから
sinsu1[i] = sinsu.charAt(i) - '0'
にして、実行してみます。

イメージ説明

eclipse などのプログラミング環境を使えば。print 文を埋め込まなくても、
好きな場所で実行を一時停止し、そのときの変数の値を調べたりできます。

投稿2018/04/11 15:09

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 22:47

わかりました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問