-1

重複の可能性:
10 進数変換エラー

クラスのプログラムを書いていますが、8 進数を 10 進数に変換する方法がわかりません。これが私がこれまでやろうとしてきたことです:

   import java.util.Scanner;

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

    System.out.print("Enter number: ");
    int oct  = input.nextInt();
    int d2count = 0;
    int result=0;
    int d3count = 0;
    int d3 = 0;
    int d2 = 0;

    d3 = oct;
    d2 = oct;

    if(oct < 1000){
    while ( d3 >= 100){
    d3 = d3 - 100;
        d3count++;
    }}

    if (oct < 100){
    while ( d2 >= 10){
    d2 = d2 - 10;
        d2count++;
    }}

    result = (d3count * 64)+(d2count * 8) + d2;
System.out.printf("%d\n",result);
}
}

したがって、基本的には、数値を 1 桁に減らす方法が必要です (つまり、1337 を 1,3,3,7 に)。本当は今あるものでやりたいのですが、私のやり方には見えないエラーがいくつかあるようです。100 未満の数値を入力すると実際に機能しますが、100 を超える数値を入力すると、変換がどこかでめちゃくちゃになります。私はJavaが初めてなので、基本的なテクニックがあればあるほど良いです、ありがとう

4

4 に答える 4

4

以下は、10進数から8進数に変換します。

java.util.Scannerをインポートします。

public class test { 
    public static void main ( String args[]) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number: ");
        int oct  = input.nextInt();
        String result= Integer.toString(oct,8);
        System.out.println(result);
    }
}

以下は、8進数から10進数に変換します。

public static void main ( String args[]) {
     Scanner input = new Scanner(System.in);
     System.out.print("Enter number: ");
     String oct  = input.next();
     int result= Integer.parseInt(oct,8);
     System.out.println(result);
 }

以下は、8進数から10進数に変換するよりアルゴリズム的な方法です。

     public static int convert(String oct) {
         int i= 0;  
         for(int j = 0; j < oct.length(); j++) { 
                char num = oct.charAt(j);           
                num -= '0';     
                if(num<0||num>7) {          
                    sysout("invalid number");
                    return -1;
                }
                i *= 8;                          
                i += num;                      
            }
            return i;
        }
     }

以下は、10進数を8進数に変換するためのものです。

public static int convert(int OctalNumber){
   int counter=0;
   int result = 0;
   while(OctalNumber !=0) {
        int temp = (int) ((OctalNumber%8) * Math.pow(10, counter));
        counter++;
        result += temp;
        OctalNumber /= 8;
    }
    return result;
}
于 2012-10-30T20:35:37.057 に答える
0

シフト機能を使用します。<1000などを使用するのではなく

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

于 2012-10-30T20:44:11.383 に答える
0

まず、コードは8進数を10進数に変換します。

第二に、あなたは

if(oct < 1000){

if (oct < 100){

ifただし、入力数が1000より大きい場合を処理するステートメントはありません。

編集:私はこれが本当に問題ではないことに気づきました。d2の計算を開始するときは、 100を何回も引いた後、d3の終了値を使用する必要があります。したがって、必要な場合は2番目の直前

d2 = d3;

ただし、1000を超える入力を処理する必要があります。

于 2012-10-30T20:41:11.723 に答える
0

適切な長さの任意の 10 進数を許可する (つまり、オーバーフローが発生しない) より優れたアルゴリズムを少し使用できます。

public int octalToDecimal(int octal)
{         
   int numDigits = Integer.toString(octal).length();
   int decimalResult = 0;
   int mask = 0x00000007;
   for(int i = 0; i < numDigits; i++)
   {
      int octalDigit = octal & mask;
      octal = octal >> 3;    
      decimalResult += octalDigit * Math.pow(8, i);
   }

   return decimalResult;
}
于 2012-10-30T20:57:46.547 に答える