#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 это всегда будет 02. Почему бы просто не проверить, находится ли она между 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 ;
}