Java 无法在此日期和月份方法中获得正确的返回-Android Studio

Java 无法在此日期和月份方法中获得正确的返回-Android Studio,java,android,switch-statement,android-date,ordinal,Java,Android,Switch Statement,Android Date,Ordinal,我一直在摆弄我创建的这个方法,无法让它工作。 get string无法转换为int或需要返回,但是我不能在return语句中输入monthString变量,因为它超出了ordinal方法的范围,并且找不到该变量 import android.app.DatePickerDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import

我一直在摆弄我创建的这个方法,无法让它工作。
get string无法转换为int或需要返回,但是我不能在return语句中输入
monthString
变量,因为它超出了ordinal方法的范围,并且找不到该变量

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.Calendar;

/**
 * Created by avi31 on 31/01/2018.
 */


import android.app.DatePickerDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Calendar;

public class ProfileSettings extends AppCompatActivity {

    private static final String TAG = "Profile_Settings";


    private DatePickerDialog.OnDateSetListener mDateSetListener;
    private TextView mDisplayDate;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        mDisplayDate = (TextView) findViewById(R.id.tvDate);

        mDisplayDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog = new DatePickerDialog(
                        ProfileSettings.this,
                        android.R.style.Theme_Holo_Light_Panel,
                        mDateSetListener,
                        year, month, day);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.show();
            }
        });


        mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                month = month + 1;
                Log.w(TAG, "Date of Birth: " + day + "/" + month + "/" + year);

                String date = day + "/" + month + "/" + year;
                mDisplayDate.setText(date);
                Toast.makeText(ProfileSettings.this, date, Toast.LENGTH_LONG).show();
                ordinal(day, month, year);
            }


            String ordinal(int day, int month, int year) {
                String[] day1 = new String[]{"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};

                String monthString = "Default";

                switch (day % 100) {
                    case 11:
                    case 12:
                    case 13:

                        switch (month) {
                            case 1:  monthString = "January";
                                break;
                            case 2:  monthString = "February";
                                break;
                            case 3:  monthString = "March";
                                break;
                            case 4:  monthString = "April";
                                break;
                            case 5:  monthString = "May";
                                break;
                            case 6:  monthString = "June";
                                break;
                            case 7:  monthString = "July";
                                break;
                            case 8:  monthString = "August";
                                break;
                            case 9:  monthString = "September";
                                break;
                            case 10: monthString = "October";
                                break;
                            case 11: monthString = "November";
                                break;
                            case 12: monthString = "December";
                                break;



                        }



                }
                Log.w(TAG, day + "" + day1[day % 10] + " " + monthString + " " + year);
                return day + monthString + year;
            }


            public void buttonClicked(View view) {
                if (view.getId() == R.id.btn_exit) {
                    finish();
                    Log.w(TAG, "Exit back to previous activity");
                }
            }
        };


    }

您正在case13中声明变量month字符串,就在第二个switch语句之前,将monthString变量移动并初始化到第一个switch语句之外。

string monthString是在switch语句中定义的,因此范围有限。把它搬到外面去


将其移到您定义的
day1
array行之后

序号(日、月、年)您没有使用函数的返回值谢谢您的评论-我尝试在我的方法中返回该值,但在“Log.w(TAG,day+”“+day1[day%10]+”“+monthString+”“+year)”上得到无法访问的语句;'你是说你的代码还没有编译?现在还没有:(我在问题中添加了完整的类hi我改变了这一点,但仍然得到了错误当我在android studio中编译时,我得到monthString可能没有在return语句中初始化错误可能是,变量,monthString没有初始化,初始化变量,String monthVariable=null;这将修复错误hi puneet than谢谢你的评论,我现在已经这样做了,但是仍然得到错误。我已经添加了完整的类代码questionSorry变量monthString可能没有在返回语句String monthString=“”中初始化;您试图在初始化变量之前使用它。
day%100
语句除了11、12和13之外,还可以有28个其他值。对于这些值,
monthString
保持未初始化状态。将其初始化为空值或添加默认处理程序将消除错误。(重新编辑拼写错误/格式。)你好,puneet,我在monthString中添加了“default”,但我一直使用“default”作为此变量的值返回。请参阅我的评论,您的
日%100
除了您正在处理的值之外,还可以有28个其他值。因此,如果您选择11、12和13之外的任何值,您将获得默认值。您好,非常感谢,这对我帮助很大,但是我初始化了monthString改为“默认”,而不是1月、2月等,它在日志中不断给我这个信息。我更新了上面的代码。您甚至没有调用函数“序号(日、月、年)”,而是“字符串原点=序号(日、月、年)“+1谢谢-我已经补充了这一点,但monthString仍然给了我我在您评论的地方声明的值。我认为您的问题是,在您的内部开关箱(在设置月份后)之后,您没有为外部外壳添加中断。您明白我的意思吗?非常感谢您的帮助!
String ordinal(int day, int month, int year) {
        String[] day1 = new String[]{"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};

        String monthString = ""; //declare here

        switch (day % 100) {
            case 11:
            case 12:
            case 13:
                Log.w(TAG, day + "th");

                switch (month) {
                    case 1:  monthString = "January";
                        break;
                    case 2:  monthString = "February";
                        break;
                    case 3:  monthString = "March";
                        break;
                    case 4:  monthString = "April";
                        break;
                    case 5:  monthString = "May";
                        break;
                    case 6:  monthString = "June";
                        break;
                    case 7:  monthString = "July";
                        break;
                    case 8:  monthString = "August";
                        break;
                    case 9:  monthString = "September";
                        break;
                    case 10: monthString = "October";
                        break;
                    case 11: monthString = "November";
                        break;
                    case 12: monthString = "December";
                        break;
                }
                break; //you're missing this break after the case
        }
        return day + monthString;
    }