如何找到给定的数字是八进制还是不是?

时间:2014-01-10 10:04:13

标签: java

在这里我找到最多3位的八进制数,如果条件可以任何人减去这个if语句和值分配我使用冗长。请注意,不要使用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);
    }
}

7 个答案:

答案 0 :(得分:5)

您可以使用以下正则表达式仅匹配八进制数字:

  ^0[1-7][0-7]*$
  • ^,$:Anchors
  • 0:字面值0.所有八进制数字都以0开头。
  • [1-7]:从1到7的数字的Char类,因为只有这些是有效的八进制数字。
  • *:前一个零或更多的量词。

所以基本上这个正则表达式只匹配那些在开头有0的字符串,并且包含1到7之间的一个或多个数字。

如果不存在前导0要求,则可以使用正则表达式:

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

答案 1 :(得分: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");
       }

如果给定的数字不是八进制,则抛出NumberFormatException.

这里8是基数或基数 - 表示八进制数

答案 2 :(得分:1)

尝试ip.nextInt(8) 这将确保输入值必须为八进制,但return为输入八进制值的十进制值

答案 3 :(得分:0)

我认为你不应该把它读作十进制整数,然后试着找出它是否是八进制(所以你读错了,必须转换它)。您最好将其作为字符串读取,然后检查或尝试将其解析为八进制。

@gowtham告诉你如何转换和@ murtaza.webdev告诉你如何检查字符串。

答案 4 :(得分: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]*$" );

    }

答案 5 :(得分:0)

在C ++中,但出现了:

static constexpr std::string_view prefixes[] = { "0o", "0", "o", "q" };
std::string_view val("q777");
size_t index = 0;

for (const auto prefix : prefixes) {
    if (val.rfind(prefix, 0) == 0) {
        index = prefix.length();
        break;
    }
}

bool isOctal = index == 0 || val.length() <= index ? false : 
std::count_if(val.begin() + index, val.end(), [](const char c) {
    return isdigit(c) && c <= '7';
}) == val.length() - index;

答案 6 :(得分:0)

还有另一个实用程序:

import java.util.Scanner;
public class IsOctal_Check {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter Number : \n");
        String input = sc.nextLine();
        System.out.println("isOctal : "+isOctal(input));
    }

    public static boolean isOctal(String octal) {
        boolean isOctal = false;
        if (octal != null && !octal.isEmpty()) {
            int number = Integer.parseInt(octal);
            while (number > 0) {
                if (number % 10 <= 7) {
                    isOctal = true;
                } else {
                    isOctal = false;
                    break;
                }
                number /= 10;
            }
        }
        return isOctal;
    }
}

Source