2016-05-17 1 views
0

Я пробую следующий вопрос. Мне нужно найти длину целочисленной цифры, поэтому я преобразовал ее в строку, и я могу получить вывод для всех чисел, кроме чисел, начинающихся с нулей. Я могу пройти только один тест из трех. Я не могу понять, что еще не так в моем коде.Длина строки без учета нулей в начале

Код:

import java.util.*; 

class Test { 

public static void main(String []args) { 
    int no; 
    int sum; 

    Scanner sc=new Scanner(System.in); 
    no = sc.nextInt(); 

    String x=Integer.toString(no); 

    int len=x.length(); 

    int lno=no%10; //3rd digit 
    int fno=no;  //first digit 
    int mno=(no/10)%10; //middle digit 

    while(fno>=10) { 
     fno/=10;  
    } 

    sum=fno+lno; 

    if(len!=3) { 
     System.out.print("Invalid Input\n"); 

    } else { 
     if(sum==mno) { 
      System.out.print("Lucky Number\n"); 

     } else { 
      System.out.print("Not A Lucky Number\n"); 
     } 
    } 
} 

}

+3

Возможно, вы можете переформатировать фрагмент кода, чтобы сделать его более читаемым –

+0

С какой ошибкой вы сталкиваетесь? Также, пожалуйста, отредактируйте вопрос для лучшей читаемости и понимания. – nullpointer

+0

Не думаю, что я понимаю ваш вопрос. Каким должен быть выход, если входной сигнал 022? 0242? Я считаю, что 'sc.nextInt()' никогда не скажет вам, есть ли ведущие нули, поэтому вы можете искать другой метод ввода. –

ответ

3

Почему бы вам не использовать метод next(Pattern) доступный в Scanner?

Вы можете использовать регулярное выражение, чтобы соответствовать 3-значное число и если оно не соответствует его выбросит InputMismatchException, который вы можете поймать и выход Invalid Input.

Если это так, вы знаете, что у вас есть String длины 3, которую вы можете использовать каждый символ в качестве индивидуального номера. Добавьте первый и последний индекс вместе и посмотрите, равен ли он второму индексу.

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

    try (Scanner scan = new Scanner(System.in)) { 

     try { 
      String number = scan.next(Pattern.compile("\\d{3}")); 

      int i = Integer.parseInt("" + number.charAt(0)); 
      int j = Integer.parseInt("" + number.charAt(1)); 
      int k = Integer.parseInt("" + number.charAt(2)); 

      if ((i + k) == j) { 
       System.out.println("Lucky Number"); 
      } else { 
       System.out.println("Not A Lucky Number"); 
      } 
     } catch (InputMismatchException e) { 
      System.out.println("Invalid Input"); 
     } 
    } 
} 
2

Предполагая, что ведущие нули должны быть частью ввода вы не должны преобразовать в целое вообще. Просто проанализируйте строку, чтобы извлечь цифры.

Scanner sc = new Scanner(System.in); 
String input = sc.nextLine(): 

if (input.length() != 3) { 
    throw new IllegalArgumentException("Invalid input"); 
} 

int first = Integer.parseInt(input.substring(0, 1)); 
int second = Integer.parseInt(input.substring(1, 2)); 
int third = Integer.parseInt(input.substring(2, 3)); 

if (first + third != second) { 
    System.out.print("Not a "); 
} 
System.out.println("Lucky Number"); 
+0

Гораздо более интересно работать с числами, особенно если у вас целые числа. – AxelH

+0

Я пробовал Math.log10, но не работает – Ace

+0

Конечно, Math.log10 работает! Это просто не решает вашу проблему. –

1

Еще один способ подумать об этой проблеме - получить цифры с использованием индексации строк. Этот подход был бы полезен, когда определение счастливого числа изменилось бы на что-то вроде суммы 1-й и 8-й цифр.

Вот пример:

import java.util.*; 

class Test 
{ 
    public static void main(String []args) 
    { 
     Scanner sc=new Scanner(System.in); 
     String no=sc.nextLine(); 

     if(no.matches("^[0-9]+$")) 
     { 
      if(no.length()!=3) 
       System.out.println("Not a Valid Input"); 
      else if(no.length()==3 && (Character.getNumericValue(no.charAt(0))+Character.getNumericValue(no.charAt(2)))==Character.getNumericValue(no.charAt(1))) 
       System.out.println("Lucky Number"); 
      else 
       System.out.println("Not A Lucky Number"); 
     }else 
      System.out.println("Not a number"); 
    } 
} 

А вот выход:

$ javac Test.java 
$ java Test 
165 
Lucky Number 
$ java Test 
022 
Lucky Number 
$ java Test 
145 
Not A Lucky Number 
$ java Test 
12 
Not a Valid Input 
+1

Ваш код никогда не выведет «Недействительный ввод». И удачные числа, начинающиеся с нуля, потерпят неудачу, как в коде OP. – Valentin

+0

Последний оставшийся приговор, ваш код ничего не напечатает, если вход не является числом. – Valentin

+0

@ Валентин исправил это – ritesht93

Смежные вопросы