2017-05-23 3 views
-1

BlueJ IDEでこのプログラムをJavaで作成しました。これは、小数点のベースで数値を取って、それをベース9までのユーザー選択のベースに変換することを意味します。これは、2つの数値の間のモジュラスを取り、それを文字列に挿入することによって行われます。コードは入力ステージまで動作し、その後出力はありません。私の数学は正しいと確信していますが、構文に問題があるかもしれません。次のように他のすべての機能が動作しているにもかかわらず、コード内にWhileループの出力がないのはなぜですか?

私のコードは次のとおりです。

import java.util.*; 
public class Octal 
{ 

    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 

     int danum = 0; 
     int base = 0; 
     System.out.println("Please enter the base you want the number in (till decimal). Enter as a whole number"); 
     base=in.nextInt(); //This is the base the user wants the number converted in// 
     System.out.println("Enter the number you want converted (enter in decimal)"); 
     danum=in.nextInt(); //This is the number the user wants converted// 

     while (danum/base >= base-1 && base < danum) { 
      int rem = danum/base; //The number by the base// 
      int modu = danum % base;//the modulus// 

      String summat = Integer.toString(modu);//this is to convert the integer to the string// 
      String strConverted = new String();//Making a new string??// 
      StringBuffer buff = new StringBuffer(strConverted);//StringBuffer command// 
      buff.insert(0, summat); //inserting the modulus into the first position (0 index)// 

      danum = rem; 

      if (rem <= base-1 || base>danum) {//does the || work guys?// 
       System.out.println(rem + strConverted); 
      } 
      else { 
       System.out.println(strConverted); 
      } 

} 
} 
} 

私は、Javaに非常に新しいですので、私は構文を十分に認識していないです。私はあなたの時間を無駄にしないように、研究に最善を尽くしました。プログラマーとして自分のコードとスキルを向上させる方法を教えてください。ありがとう。

+3

あなた自身を見つけるためにデバッガを使用してください。 –

+0

...デバッガを使用できない場合は、いくつかのsysout文を追加して、たとえば次のように確認してください。あなたの数学(whileループ条件など)... – home

+0

コードが構築されて実行されても、構文に問題はありません。 どのような例で試しましたか? whileループの前に 'base'と' danum'を出力して、正しい値を得ているかどうかを確認してください。 – Shark

答えて

1

編集(明らかに前の回答何あまりにも速い応答...)

String summat = Integer.toString(modu); 
String strConverted = new String(); 
StringBuffer buff = new StringBuffer(strConverted); 
buff.insert(0, summat); 
... 

System.out.println(strConverted); 

実は、strConvertedはまだ空の文字列である、多分あなたは希望ではなく、表示buff.toString()

しかし、私はしないでください実際にこのすべてをmoduの値を表示するだけにする理由を理解してください。あなたはちょうどいいでしょうSystem.out.println(modu)

私はあなたの値を "保存"し、一桁ではなく一桁であなたの整数を表示すると仮定します。

whileの外側に番号を格納する必要があります。そうでなければ、あなたの文字列はループの呼び出しごとにinitになります。 (そして外側に印刷してください)

したがって、StringBufferをループの外側に設置してください。あなたは内部のあなたのif

(あなたも StringBuilderの代わり StringBufferを使用することができます。これは、 https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.htmlを同期 StringBuffer作業を除いて同じように機能する) int
http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html#insert-int-int-

を受け入れるStringBufferので、ごintStringに変換する必要はありません。ループは特定のケース(ベースよりも低い)です。これはループの反対側の状態なので、ループの前にはありません。 (ところで:rem <= base-1base>danumがこの場所でrem == danumので、実際には1つのテストのみです)

はそう:

StringBuffer buff = new StringBuffer(); 

if(base > danum) { 
    buff.append(danum); 
} else { 
    while (danum/base >= base - 1 && base < danum) { 
     int rem = danum/base; 
     int modu = danum % base; 
     buff.insert(0, modu); 
     danum = rem; 
    } 

    if(danum > 0) { 
     buff.insert(0, danum); 
    } 
} 

System.out.println(buff.toString()); 

また、私は強くあなたのコードを実行する前に、あなたの入力をテストするためにrecommandでしょう。 (ベース用ませゼロ、無文字など...)

+0

ユーザーが入力したので、有効な値 - エラーチェックが欠落していると想定されます - 1と1は機能しません。どちらか –

+0

@ Daij-Djan私の悪い、私は私の眼鏡を着用する必要があります... – milcaepsilon

+0

@ Daij-Djan今より良いはずです:) – milcaepsilon

0

2物事

  1. は、ユーザー入力を取得した後にチェックするより多くのエラーを行いません。それはパスの下で奇妙な 'エラー'を避ける

  2. ループ内のintからStringへの変換が間違っています。全体のサマットとバフ....:: はstrConvertedに影響を与えるdoesntのバッファを変更する(これは常に空のthatsのあなたが見たものである)

はこれを取り除くためにしてみてください。 :)


  1. エラーが
  2. エラー関連のロジックがされている関連のjava
+0

注:すべてを書き直して紙に書いてください。アルゴリズムが動作したら、Javaをミックスに追加する –

0

あなたのコードは次のような問題があります。

  1. まず、あなたが宣言していると、初期化をごstrConvertedを変数(結果を格納する変数)をwhileループの内部に格納します。したがって、ループが繰り返されるたびに、値""の新しい文字列strConvertedが作成されます。したがって、あなたの答えは決して正しいことはありません。
  2. 第2に、StringBuffer buffは文字列strConvertedを決して変更しません。実際に呼び出すことによって文字列を変更する必要があります。
  3. あなたの結果をwhileループ内に印刷すると、繰り返しごとに段階的な結果が印刷されます。ループ内でstrConvertedの値を変更する必要があります。最終結果をその外側に出力する必要があります。
関連する問題