2014-01-10 11 views
0

在這裏,我發現八位數字高達3位數字,我使用冗長如果條件任何人都可以減少這一點,如果語句和值分配。請注意,不要使用prdefined過程或內置包..如何找到給定的數字是八進制還是不是?

import java.util.Scanner; 
class octdec 
{ 
public static void main(String arg[]) 
    { 
    int back=0; 
    do 
     { 
     Scanner ip = new Scanner(System.in); 
     int no,mod1,mod2,mod3,diff1,diff2,diff3,num1,num2,num3; 
     System.out.print("Enter Octal No upto 3 digits : "); 
     no=ip.nextInt(); 
     mod1=no%10; 
     mod2=no%100; 
     mod3=no%1000; 
     diff1=no-mod1; 
     diff2=no-mod2; 
     diff3=no-mod3; 
     num1=diff1/10; 
     num2=diff2/100; 
     num3=diff3/1000; 
     if(no==8||no==9||mod1==8||mod1==9||mod2==8||mod2==9||mod3==8||mod3==9||num1==8||num1==9||num2==8||num2==9||num3==8||num3==9) 
     System.out.println("Invaild Octal Nimber "); 
     else 
     System.out.println("Vaild Octal Nimber :"+no); 
     } 
    while(back==0); 
    } 
} 
+3

提示:使用'while'循環。 –

+0

一個'int'沒有一個八進制,十進制或其他任何屬性。八進制,十進制,十六進制等只是顯示數字的不同方式 - 它不是數字的固有屬性。你不能拿一個'int'來檢查它是否是八進制的。 – Jesper

回答

5

您可以使用下面的正則表達式匹配只有八進制數:

^0[1-7][0-7]*$ 
  • ^,$:船錨
  • 0 :字面值0.所有八進制數以0開頭。
  • [1-7]:1到7位數字的Char類,因爲只有它們是有效的八進制數字。
  • *:前面的零個或更多的量詞。

所以基本上這個正則表達式匹配只有在開始的時候有一個0,幷包含一個1或多個數字到7

如果前導0的要求是不存在,你可以使用正則表達式的字符串:

^[1-7][0-7]*$ 
1

您可以分析傳遞基數像下面

try{ 
     String number="30"; 
     int i=Integer.parseInt(number,8); // returns the integer represented by the string argument in the specified radix. 

     System.out.println("Octal Number"); 
     } catch(NumberFormatException e) { 
      System.out.println("Not an octal number"); 
     } 

數量如果給定的數字是不是OC TAL,它拋出NumberFormatException.

這裏8是基數或基地 - 代表的八進制數

0

我不認爲你應該看它作爲一個十進制整數,然後揣摩,如果它可能是八進制(所以你讀錯了,必須將其轉換)。你最好把它看作字符串,然後檢查或試圖解析它爲八進制。

@gowtham告訴你如何轉換和@ murtaza.webdev告訴你如何檢查字符串。

1

嘗試ip.nextInt(8)
這將確保輸入的值必須爲八進制,但return輸入八進制值

0

的十進制值試試這個方法

/** 
* 
* @param octalInput 
* @return boolean flag that determines value input by user is a valid octal number 
*/ 
    public static boolean isValidOctalInput(String octalInput) 
    { 

     return octalInput.matches("[0-7]*$"); 

    } 
相關問題