Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java switch语句有问题吗?_Java_String_Random_Switch Statement_Case - Fatal编程技术网

Java switch语句有问题吗?

Java switch语句有问题吗?,java,string,random,switch-statement,case,Java,String,Random,Switch Statement,Case,我只是想写一个程序,生成2000年到2010年之间的一个随机年份,然后读出那一年发生的一个空间探索事实。 这是我写的代码,但是当我运行它时,不管生成的年份是什么,它只打印最后一个案例(2010)。我该如何解决这个问题 import java.util.Random; public class SpaceExploration { public static void main(String[] args) { int year =(int)(Math.random()*11) + 2000;

我只是想写一个程序,生成2000年到2010年之间的一个随机年份,然后读出那一年发生的一个空间探索事实。 这是我写的代码,但是当我运行它时,不管生成的年份是什么,它只打印最后一个案例(2010)。我该如何解决这个问题

import java.util.Random;

public class SpaceExploration {
public static void main(String[] args) {

int year =(int)(Math.random()*11) + 2000;
String eventString = "";

switch (year) {
    case 2000:  eventString = "2000: First spacecraft orbits an asteroid";
    case 2001:  eventString = "2001: First spacecraft lands on asteroid";
    case 2002:  eventString = "2002: N/A";
    case 2003:  eventString = "2003: Largest infrared telescope released";
    case 2004:  eventString = "2004: N/A";
    case 2005:  eventString = "2005: Spacecraft collies with comet";
    case 2006:  eventString = "2006: Spacecraft returns with collections from a comet";
    case 2007:  eventString = "2007: N/A";
    case 2008:  eventString = "2008: Kepler launched to study deep space";
    case 2009:  eventString = "2009: N/A";
    case 2010:  eventString = "2010: SpaceX sucessfully sends spacecraft to orbit and back";
    }
    System.out.println(eventString);
}
}

您需要在每个案例后添加
break
语句,否则在找到匹配案例后,它将只执行所有案例,直到找到break或结束,在您的案例中,这是
2010

您的代码应该如下所示:

switch (year) {
    case 2000:  
       eventString = "2000: First spacecraft orbits an asteroid";
       break;
    case 2001:  
       eventString = "2001: First spacecraft lands on asteroid";
       break;
   ...

注意每个
案例后的
中断

如果其他答案正确,您必须在每个案例后引入中断。 通常,您还应该添加case
default
case,并添加一些控制台输出,以确保您的软件按预期工作

另一种解决方案是使用HashMap:

Map<Integer, String> map = new HashMap<>();
map.put(2010, 2010: SpaceX sucessfully sends spacecraft to orbit and back);
...
String eventString = map.get(year);
Map Map=newhashmap();
map.put(2010年,2010年:SpaceX成功地将航天器送入轨道并返回);
...
String eventString=map.get(年);

像这样,您将在提供的年份输入
开关
语句,然后一直到最后一个案例
。这样,您的
eventString
总是包含2010年的值。为了防止这种情况,只需在每个
案例中添加
break
语句break是用于从循环跳转(while、do while和for)的关键字,switch语句,当某些条件匹配并且您希望从循环或切换中跳出时,应使用break

    while(true){
        if(true) {
            break ; // when you want to get out from the loop 
        }
    }

对于switch语句,您应该使用break语句来摆脱循环。

您所经历的是
switch
语句的一个特性,称为“fall-through”。 虽然通常使用break变量(这在大多数情况下是有意义的),但仍有一些应用程序需要按照定义的顺序执行,在某些情况下会以一种不同的方式出现。请看下面的应用程序()

另一个有趣的问题是break语句。每个break语句终止封闭的switch语句。控制流继续执行开关块后面的第一条语句。break语句是必需的,因为如果没有它们,开关块中的语句就会失效:匹配的case标签之后的所有语句都会按顺序执行,而不管后续case标签的表达式如何,直到遇到break语句为止。程序SwitchDemoFallThrough在开关块中显示失效的语句。该程序显示与整数月份对应的月份以及一年中接下来的月份:

公共类SwitchDemoFallThrough{
公共静态void main(字符串[]args){
java.util.ArrayList futureMonths=
新的java.util.ArrayList();
整月=8;
开关(月){
案例1:未来月份。添加(“一月”);
案例2:未来月份。添加(“二月”);
案例3:未来月份。添加(“三月”);
案例4:未来月份。添加(“四月”);
案例5:未来月份。添加(“五月”);
案例6:未来月份。添加(“6月”);
案例7:未来月份。添加(“7月”);
案例8:未来月份。添加(“8月”);
案例9:未来月份。添加(“9月”);
案例10:未来月份。添加(“10月”);
案例11:未来数月。添加(“11月”);
案例12:未来月份。添加(“12月”);
打破
默认:中断;
}
if(futureMonths.isEmpty()){
System.out.println(“无效月号”);
}否则{
用于(字符串月份名称:未来月份){
系统输出打印项次(月名);
}
}
}

}
如果我想让它公布所选年份和每个案例,一直到第一个案例(2000年),我会怎么做?在这种情况下,您可以从2010年开始,到2000年结束。