为什么这个构造函数没有给我正确的答案

时间:2019-02-26 21:29:35

标签: java if-statement constructor

我在编程上休息了一会儿,我想知道为什么该类没有给我期望得到的正确答案:

public class Date
{
    private int _day;
    private int _month;
    private int _year;
    public Date(int day, int month, int year)
    {
        _day=day;
        _month=month;
        _year=year;
        if((day<1||day>31)&&(month<1||month>12)&&(year<1000||year>9999))
            {
                _day=26;
                _month=2;
                _year=2019;
            }
        }
    public String toString()
    {
        return _day+"/"+_month+"/"+_year;
    }
    public static void main(String[]args)
    {
        Date test= new Date(5,13,1999);
        System.out.println(test.toString());
    }
}

当我将值插入“ test”对象为(32,5,1999)时,它会打印出来 26.2.2019。 当我将值插入为(5,14,1999)时,它将输出5.14.1999, 当我将值插入为(5,6,900)时,它将输出为5.8.900。 当用户输入非法值(26.2.2019)时,为什么不能获得在构造函数中设置的默认值。 谢谢您的回答:)

4 个答案:

答案 0 :(得分:1)

问题出在import { useReducer } from "react"; import types from "./types"; const initialState = { data: [], error: [], status: types.STATUS_IDLE }; export function useApiCallReducer() { function reducer(state, action) { console.log("prevState: ", state); console.log("action: ", action); switch (action.type) { case types.STATUS_FETCHING: return { ...state, status: types.STATUS_FETCHING }; case types.STATUS_FETCH_SUCCESS: return { ...state, error: [], data: action.data, status: types.STATUS_FETCH_SUCCESS }; case types.STATUS_FETCH_FAILURE: return { ...state, error: action.error, status: types.STATUS_FETCH_FAILURE }; default: return state; } } return useReducer(reducer, initialState); } 语句中,该语句仅在 any 参数错误时为您提供默认值。

例如

import { useReducer } from "react";
import types from "./types";

const initialState = {
  data: [],
  error: [],
  status: types.STATUS_IDLE
};
function reducer(state, action) {
  console.log("prevState: ", state);
  console.log("action: ", action);
  switch (action.type) {
    case types.STATUS_FETCHING:
      return {
        ...state,
        status: types.STATUS_FETCHING
      };
    case types.STATUS_FETCH_SUCCESS:
      return {
        ...state,
        error: [],
        data: action.data,
        status: types.STATUS_FETCH_SUCCESS
      };
    case types.STATUS_FETCH_FAILURE:
      return {
        ...state,
        error: action.error,
        status: types.STATUS_FETCH_FAILURE
      };
    default:
      return state;
  }
}

export function useApiCallReducer() {
  return useReducer(reducer, initialState);
}

您可能希望将声明更改为

if (...)

为了在发生错误时获取默认日期

答案 1 :(得分:0)

您的if语句同时检查“日期,月份和年份”是否错误以提供默认结果。您应该使用“ ||”代替 ”&”。

答案 2 :(得分:0)

由于您已远离编程,因此应签出Java Operators。 遇到问题的是逻辑运算符。

我希望这会有所帮助! :)

答案 3 :(得分:0)

如果要将日期,月份和年份分别替换为默认值,则如下所示使用

if(day<1||day>31) _day=26;
if(month<1||month>12) _month=2;
if(year<1000||year>9999)_year=2019;

如果即使其中一项输入错误,也要将日期更新为默认值,请使用

if((day<1||day>31)||(month<1||month>12)||(year<1000||year>9999))
{
  _day=26;
  _month=2;
  _year=2019;
}