Проверка, определен ли целочисленный аргумент для метода - PullRequest
1 голос
/ 04 августа 2020

Сценарий : в настоящее время я пытаюсь создать календарь в Java, одним из созданных мной методов ( getMonthSize ) является получение размера месяца (как показано). Моя цель в настоящее время - заставить метод реагировать независимо от того, определен ли аргумент пользователем (указать размер текущего месяца, если аргумент оставлен пустым, и указать размер введенного месяца, если аргумент определен).

Усилия : Я провел довольно тщательный поиск ответа в Интернете, я наткнулся на ответы, проверяющие, является ли arg.length == 0 (хотя оказывается, что это работает, только если arg a String) и отвечает, используя что-то вроде «arg! == undefined» (что, я думаю, может быть для javascript), безрезультатно. Я также узнал, что если целое число не инициализировано, его значение по умолчанию будет равно 0, так что это то, что я пытался использовать с показанным кодом, хотя казалось, что java все еще ожидает, что я введу «0» для метод для работы.

Вопрос : Я надеюсь, что есть какая-то команда, которая проверяет, оставлен ли аргумент пустым, что позволяет мне установить 2 случая и достичь того, что я хочу с помощью метода .

package model;

import java.util.Calendar;

public class myCalendar {
   private Calendar calendar=Calendar.getInstance();
   private int day=calendar.get(Calendar.DAY_OF_WEEK);
   private int date=this.calendar.get(Calendar.DAY_OF_MONTH);
   private int month=calendar.get(Calendar.MONTH)+1;
   private int year=calendar.get(Calendar.YEAR);
   
   public void setCalendar(int Year, int Month, int Date){
       this.calendar.set(Year,Month-1,Date);
   }
   
   public int getDay(){
      return day;
   }
   
   public int getDate () {
       return date;
   }
   
   public int getMonth(){
       return month;
   }
   
   public int getYear() {
       return year;
   }
   
   public int getFirstDay () {
       Calendar test = this.calendar;
       test.set(year, month-1, 1);
       return test.get(Calendar.DAY_OF_WEEK)-1;
   }
   
   public int getMonthSize (int num) {
       int Month=0;
       int days=0;
       if (num>0){
       Month=num;
       } else {
       Month=month;
       }
       if(Month==1||Month==3||Month==5||Month==7  
       ||Month==8||Month==10||Month==12){   
        days=31;   
      }   
        if(Month==4||Month==6||Month==9||Month==11)   
      {   
        days=30;   
      }   
      if(Month==2)   
      {   
        if(((year%4==0)&&(year%100!=0))||(year%400==0))   
        {   
          days=29;   
        }   
        else   
        {   
          days=28;   
        }   
      }
      return days;
   }
   
   public String getNow () {
       String monthNames[]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
           String a=monthNames[month-1]+", "+String.valueOf(year);
       return a;
   }
   
}

1 Ответ

0 голосов
/ 04 августа 2020

Надеюсь, я правильно понял вашу проблему.

Проблема в том, что ваш пользователь может запустить метод без действительного аргумента. Если у вас есть фронтенд, то вы тоже должны его там поймать. Но в бэкэнде (java) вы можете работать с блоком try или просто с if-else.

Приведите целое число в строку, а затем используйте регулярное выражение (возможно, что-то вроде этого

String text = num + "";
if (text != null && text.matches("\\d+")) {
    //...
}

Или вы можете преобразовать Integer в String и использовать String.isEmpty (). IsEmpty возвращает true тогда и только тогда, когда length () равен 0. (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#isEmpty () ).

Sting temp = num + "";
if (num.isEmpty()) {
    //...
}

Или просто блок try-catch, в котором вы вводите данные в новую переменную.

try {
    Month = Integer.parseInt(num);
} catch (NumberFormatException e) {
    // handle error
}

И обратите внимание, что ваша переменная «Месяц» должна быть «месяц». В большинстве сообществ программистов каждый использует переменные в нижнем регистре.

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

Изменить: О, и я проверил другие комментарии, и я заметил, что вы новичок. Вот, возможно, несколько полезных советов, чтобы каждый в вашем классе, включая учителя, мог легче читать ваш код. В большинстве языков программирования есть что-то вроде "checkstyle" ". Это трудно объяснить, но с помощью Google вы можете найти полезные советы.

Я сделаю несколько «предложений» по вашему коду, которые вы можете принять или проигнорировать. Например, пробелы между некоторыми символами, некоторые комментарии, et c. Но не зацикливайтесь на качестве. В некоторых IDE вы можете автоматически форматировать свой код до «стандартного». С Intellij это так. ctrl + alt + l

import java.util.Calendar;

public class myCalendar {
    private Calendar calendar = Calendar.getInstance();
    private int day = calendar.get(Calendar.DAY_OF_WEEK);
    private int date = this.calendar.get(Calendar.DAY_OF_MONTH);
    private int month = calendar.get(Calendar.MONTH) + 1;
    private int year = calendar.get(Calendar.YEAR);

    /**
     * Description what the method does.
     *
     * @param Year  what does the parameter?
     * @param Month ""
     * @param Date  ""
     */
    public void setCalendar(int Year, int Month, int Date) {
        this.calendar.set(Year, Month - 1, Date);
    }

    public int getDay() {
        return day;
    }

    public int getDate() {
        return date;
    }

    public int getMonth() {
        return month;
    }

    public int getYear() {
        return year;
    }

    /**
     * Description what the method does.
     *
     * @return value (short description)
     */
    public int getFirstDay() {
        Calendar test = this.calendar;
        test.set(year, month - 1, 1);
        return test.get(Calendar.DAY_OF_WEEK) - 1;
    }

    /**
     * Description what the method does.
     *
     * @param num (short description)
     * @return (short description)
     */
    public int getMonthSize(int num) {
        int month;
        int days = 0; //My IDE tells me that need to be initialized, but why? Are there cases where the method returns 0?
        //I think that num=100 returns 0, so maybe you can catch this case with if(num > 12) or something similar
        if (num > 0) {
            month = num;
        } else {
            month = this.month;
        }
        if (month == 1 || month == 3 || month == 5 || month == 7
            || month == 8 || month == 10 || month == 12) {
            days = 31;
        }
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            days = 30;
        }
        if (month == 2) {
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                days = 29;
            } else {
                days = 28;
            }
        }
        return days;
    }

    public String getNow() {
        String monthNames[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
        String a = monthNames[month - 1] + ", " + String.valueOf(year);
        return a;
    }

}

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