Как получить длину int из пользовательского ввода в Java

#java

#java

Вопрос:

Я пытаюсь получить длину символов, которые вводит пользователь. Если пользователь вводит строку длиной меньше 5 или больше 5, то в ней должно быть написано «Введите действительное 5-значное число». Если длина равна 5, то я хочу, чтобы она перешла к следующему вопросу, но по какой-то причине это не работает. Спасибо!

 package Hw;
import java.util.Scanner;
public class Library {

public static void main(String[] args) {

int  cardnumber = 0;
int age;
int item = 0;
int overdue = 0;

int fine = item * overdue;

int length = length(Integer.toString(cardnumber));

Scanner Keyboard = new Scanner (System.in);



System.out.println("Enter Card Number: ");
cardnumber = Keyboard.nextInt();
System.out.println("Enter Age: ");
        age = Keyboard.nextInt();
        System.out.println("Enter Item Type (Book = 1, Magazine = 2, Dvd = 3): ");
        item = Keyboard.nextInt();
        System.out.println("Enter The Amount Of Days The Item Has Been Overdue");
overdue = Keyboard.nextInt();

if (length == 5)
{
System.out.println(cardnumber);
}
if (length > 5 || length < 5)
{
System.out.println("Enter A Valid 5 Digit Number");
}



if (item == 1)
{
fine = (int) (overdue * 0.50);
}

else if (item == 2)
        {
            fine = (int) (overdue * 0.25);
        }

    else if (item == 3)
        {
        fine = (int) (overdue * 1.50);
        }



if (age > 5 || age < 18)
{
fine = (int) 1.00;
}


if (age > 70)
{
fine = 0;
}


else if(age > 18 || age < 70)
{

if(overdue < 5)
System.out.println("Days Overdue "  overdue);
}

else
{
fine = (int) 5.00;
}


/*else if (age < 6 || age > 17)
{
fine = (int) 1.00;
}
*/



System.out.println("Card Number "  cardnumber);



System.out.println("Age "  age);

//  System.out.println("Days overdue "  overdue);

System.out.println("Fine "  fine);

//  System.out.println("Fine adjustment reason "  )


if(item == 1)
{
System.out.println("item Book");
}

else if(item == 2)
{
System.out.println("item Magazine");
}

else if(item == 3)
{
System.out.println("item Dvd");
}

else if(item <1 || item >3)
{
System.out.println("Invalid Information");
}   
}

private static int length(String string) {
// TODO Auto-generated method stub
return 0;
}
}
  

Комментарии:

1. Вам нужно пересчитать length после прочтения его как значения. В Currentl это всегда будет 0

2. Почему бы просто не проверить, находится ли она между 10000 и 99999?

3. Вы могли бы воспользоваться противоположным подходом, приняв значение в виде строки и просто проверив length() , хорошо ли это, а затем проанализируйте его в int.

4. Является 00123 допустимым 5-значным номером карты?

5. Вероятно, вам следует поместить цикл вокруг номера карты, чтобы вы не продолжили, пока они не сделают это правильно. Вы не хотите удалять эту строку, а скорее переместить ее в соответствующее место.

Ответ №1:

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

Я бы рекомендовал изменить код следующим образом: Измените эту строку:

 int length = length(Integer.toString(cardnumber));
  

Для:

 String length = Integer.toString(cardnumber); 
  

Другим изменением являются следующие строки:

 if (length == 5)
{
System.out.println(cardnumber);
} 
if (length > 5 || length < 5)
{
System.out.println("Enter A Valid 5 Digit Number");
}
  

Следует заменить на:

 while(length != 5) {
    System.out.println("Enter A Valid 5 Digit Number");
    cardnumber = Keyboard.nextInt();
    length = Integer.toString(cardnumber);
}
  

Ответ №2:

Суть вашего заданного вопроса заключалась бы в том, как реализовать этот метод:

 private static int length(String string) {
    // TODO Auto-generated method stub
    return 0;
}
  

Что вы хотите, так это посмотреть на метод length(), встроенный в объект Java string.

В интересах быть полезным — похоже, что в вашем коде отражены некоторые другие заблуждения. Прошу прощения, если я слишком много читаю в предоставленном вами коде, но, похоже, вам нужно подумать о том, какая строка

 int length = length(Integer.toString(cardnumber));
  

действительно делает — или, в качестве альтернативы, какое значение cardnumber сохраняется во время выполнения вами этой строки.

Комментарии:

1. Похоже, проблема все еще существует, поскольку результат всегда гласит: введите действительный 5-значный номер. Спасибо

2. Тогда я предполагаю, что вашим единственным изменением было добавление реализации length() . Как я уже отмечал, в показанном вами коде есть проблемы, не связанные с вашим вопросом, и вам также придется их исправить, чтобы увидеть правильные результаты.

Ответ №3:

Для этого вы можете использовать простую математику:

 private static int getLength(int num) {

    int count = 1;

    while (num >= 10) {
        num = num / 10;
        count  ;
    }

    return count;
}
  

Ответ №4:

Java:
Простой Java-код, подобный приведенному ниже, также будет работать нормально ..!

 int num = sc.nextInt();    
int b=Integer.toString(num).length();
  

C

 to_string(num).length()
  

C

 count = 0    
while (num != 0) {
       num /= 10;   
       count  ;
        }