Java使用switch语句中的字符串
我有以下代码Java使用switch语句中的字符串,java,string,switch-statement,Java,String,Switch Statement,我有以下代码 switch (dayCurrent) { case 0: String today_sun = "Today is Sunday"; break; case 1: String today_mon = "Today is Monday"; break; case 2:
switch (dayCurrent) {
case 0:
String today_sun = "Today is Sunday";
break;
case 1:
String today_mon = "Today is Monday";
break;
case 2:
String today_tues = "Today is Tuesday";
break;
case 3:
String today_wed = "Today is Wednesday";
break;
case 4:
String today_thurs = "Today is Thursday";
break;
case 5:
String today_fri = "Today is Friday";
break;
case 6:
String today_sat = "Today is Saturday";
break;
// If statement for invalid entry
default: if (dayCurrent >= 7) {
System.out.println("Invalid day entered");
}
}
// Switch statements to display future day
if (dayCurrent < 7) {
switch (dayFinal) {
case 0:
String future_sun = dayFuture + " day(s) later it is Sunday";
break;
case 1:
String future_mon = dayFuture + " day(s) later is Monday";
break;
case 2:
String future_tues = dayFuture + " day(s) later is Tuesday";
break;
case 3:
String future_wed = dayFuture + " day(s) later is Wednesday";
break;
case 4:
String future_thurs = dayFuture + " day(s) later is Thursday";
break;
case 5:
String future_fri = dayFuture + " day(s) later is Friday";
break;
case 6:
String future_sat = dayFuture + " day(s) later is Saturday";
break;
如果我想创建一个System.out.println来显示两个开关的结果,我该怎么做呢?
我知道这段代码以前出现在这里:,并且更容易执行System.out.print,但我很好奇如何执行上述操作以供将来参考。串联
在代码中拼接多个字符串时,请将它们连接起来。在Java中有多种方法可以做到这一点
+符号组合字符串对象。每个字符串对象都是,这意味着您不要更改其值。相反,将生成一个新实例,将原始值与新添加的字符串对象组合在一起
String message = "My name is ";
message = message + "Basil";
message = message + ".";
System.out.println( message ); // My name is Basil.
另一种方法是调用实现接口的任何类的对象
可附加的实现是否适合您的情况
StringBuilder message = new StringBuilder( "My name is " );
message.append( "Basil" );
message.append( "." );
System.out.println( message.toString() ); // My name is Basil.
警告:仅在没有问题的地方使用StringBuilder。当可以跨多个线程访问可附加对象时,请改用
有关各种字符串相关对象的更多信息,请参阅问题
星期五
一周中的每一天有七个实例。获取一周中的今天意味着获取今天的日期,这需要一个时区。在任何一个特定的时刻,世界各地的日期都因地区而异
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DayOfWeek dow = DayOfWeek.from( today ); // `dow` is an *object*, not mere text like `Monday` or mere integer number like `1`.
使用此类对象而不仅仅是整数来表示一周中的某一天,可以使代码更加自我记录,提供并确保有效值
在开关块外定义文本对象
问题代码中的主要问题是,保存字符串的变量是在switch case中定义的;该变量在退出switch case时会超出范围,并立即成为字符串对象的候选对象。该变量会消失并被销毁,从内存中清除,换句话说,在您有机会连接或打印文本内容之前
所以这个代码:
switch (dayCurrent) {
case 0:
String today_sun = "Today is Sunday";
break;
case 1:
String today_mon = "Today is Monday";
break;
…
…应该是:
String today = null;
switch (dayCurrent) {
case 0:
today = "Today is Sunday";
break;
case 1:
today = "Today is Monday";
break;
…
但是,更好的是,我们可以用一个可追加的:StringBuilder替换该字符串对象
字符串拼接
当连接多个字符串,并且线程安全在上下文中不是问题时,请使用类
请注意,我们在开关块外定义了名为message的StringBuilder对象。在交换机外部定义意味着对象在交换机执行其任务之前、期间和之后仍然存在
StringBuilder message = new StringBuilder();
switch ( dow ) {
case DayOfWeek.MONDAY:
case DayOfWeek.TUESDAY:
case DayOfWeek.WEDNESDAY:
case DayOfWeek.THURSDAY:
case DayOfWeek.FRIDAY:
message.append( "Weekday - Working for a living. " );
break;
case DayOfWeek.SATURDAY:
case DayOfWeek.SUNDAY:
message.append( "Wohoo! Weekend… Party on Garth! " );
break;
default:
System.out.println("ERROR - Unexpectedly reached case DEFAULT on value for DayOfWeek 'dow'.");
}
代码的dayFuture部分对我来说毫无意义,似乎与跨多个开关块拼接文本的问题无关。所以我将使用一个无意义的开关
现在我们已经建立了一个由多个组件组成的消息。我们可以将其输出到
工作日——以工作为生。用巧克力
日期数学
至于向一个日期添加天数以获得另一个日期,只需调用加号…或减号…方法
如果用户输入一串数字,则解析为要添加的天数的数字
Integer days = Integer.valueOf( "4" );
加上这个天数
LocalDate future = today.plusDays( days );
如果传递此经过的时间,请使用TemporalAmount,例如或Duration对象,而不仅仅是整数
Period period = Period.ofDays( days );
LocalDate future = today.plus( period );
要查看未来日期的星期几,请获取DayOfWeek枚举对象。不需要开关
DayOfWeek dow = DayOfWeek.from( future );
您可以询问DayOfWeek的本地化名称。呼叫传递TextStyle以指定长度或缩写。并通过一个区域设置来指定用于翻译的人类语言以及用于确定标点符号和部件顺序等问题的文化规范
String dowName =
dow.getDisplayName(
TextStyle.FULL_STANDALONE ,
Locale.CANADA_FRENCH );
为什么不把sysout语句放在开关case中呢在case块中声明变量的意义是什么。它们的范围将限于这些代码块,即这些代码块外部不可见。什么是未来,什么是未来。为什么不做简单的整数运算呢?对不起,这是我第一次使用这个网站。我试着输入我的全部代码,但翻译得不好,所以我把它删掉了;和未来;在switch语句之前,在case“blocks”中指定这些变量。然后在switch语句之后是System.out.printlnoday和future。感谢您的解释,我没有意识到执行串联的方法不止一种。至于dayFuture,这个问题要求我们输入一个天和一天过去的值。@NewProgrammerMR请参阅我添加的部分,日期数学。
DayOfWeek dow = DayOfWeek.from( future );
String dowName =
dow.getDisplayName(
TextStyle.FULL_STANDALONE ,
Locale.CANADA_FRENCH );