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

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

ただいまの
回答率

88.09%

結果が表示されません

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 706
退会済みユーザー

退会済みユーザー

System.out.println(d);が実行結果で表示されません。
プログラムのどこがダメなのでしょうか。プログラムとしては9進数を3進数にしたいなあと思っています。

public class kadai3_1{
    public static void main(String[] args)throws IOException{

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.print("9進数"+" ");
        String sinsu=br.readLine();
        char a;  int b=0; int c=0; String d=" "; int j;

        for(int i=0;i<sinsu.length();i++){
             a=sinsu.charAt(i);
            if(a==9){
                System.out.println("9進数ではない");
                break;
            }
        }

        for(j=0;j<sinsu.length()-1;j++){
            b+=sinsu.charAt(j)*9;
        }
        b+=sinsu.charAt(j);


        while(b>=3){
            c=b%3;
            d=d+c;
        }
        System.out.println(d);

    }
}

コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

        while(b>=3){
            c=b%3;
            d=d+c;
        }


このループに入ったが最後、bの値が変化しないので抜けられません。
結果、その次の出力が実行出来なくなっています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/09 22:38

    ほんとですね。。。。
    ありがとうございます!

    キャンセル

0

こんにちは、最後のwhile文のが無限ループになっているいがに訂正すべき点がございます。

  1.  
if(a == 9)


のところですが厳密にいうと

if(a == '9')


です。

  1.  
for(j=0;j<sinsu.length()-1;j++){
            b+=sinsu.charAt(j)*9;
        }
        b+=sinsu.charAt(j);


ここは、10進数に変換するところだと思いますが、すべての位に9を掛けその合計を出しています。
9進数は1の位,9の位,81の位...となりますのですべて9を掛けると10進数に変換することができません。
(まだ訂正前の状態で質問されたのならすみません)

  1.  
while(b >= 3){
            c = b % 3;
            d = d + c;
        }


最初の宣言でcはint型,dはString型で演算をしていますが,これだと表示結果が反転します。
例えば87を入力すると3進数では2221となりますが,表示結果が逆の1222となります。

私はこの部分をList(配列)でやりました。

以下,私が書いたソースコード(例)です。(変数名が微妙ですみません.)
少し書き換えるとm進数からn進数に変換するプログラムにすることができます。

import java.util.Scanner; 
import java.util.ArrayList;

public class Main{
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        int judge = 1; //9進数でなければ0に変わる
        for(int i = 0; i < line.length(); i++){
            char c = line.charAt(i);
            if(c == '9'){
                System.out.println("9進数ではありません");
                judge = 0;
                break;
            }
        }   
        if(judge == 1){
            int number10,answer;
            number10 = m_to_ten(9,line);
            ten_to_n(number10,3);

        }
    }

    public static int m_to_ten(int m,String line){ //m進数を10進数に変換

        int []number_m = new int[line.length()];
        for(int i = 0; i < line.length(); i++){
            number_m[i] = Integer.parseInt(line.substring(i,i + 1));
        }
        int number10 = 0;

        for(int i = 0; i < line.length(); i++){
            number10 += number_m[i] * ruijou(m,line.length() - i - 1);
        }

        return number10;
    }

    public static void ten_to_n(int number10,int n){ //10進数をn進数に変換
        int answer = 0;
        ArrayList<Integer> array = new ArrayList<>();
        while(number10 > 0){
            answer = number10 % n;
            array.add(answer);
            number10 /= n;
        }
        for(int i = array.size() - 1; i >= 0; i--){
            System.out.print(array.get(i));
        }
    }


    public static int ruijou(int m, int n){ //mのn乗
        int answer = 1;

        for(int i = 0; i < n; i++){
            answer *= m;
        }
        return answer;
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/10 18:44

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

    キャンセル

  • 2018/04/10 19:01

    いろいろ細かいところまで指摘して気を悪くしたのならすみません。
    もっとエレガントな方法(短くて済む方法)が思いついたらまた回答しておきます。

    キャンセル

  • 2018/04/10 19:15

    いえいえ、大丈夫です。
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る