Java 在for循环中使用switch语句
我有一个关于在for循环中使用switch语句是否合法的问题。它写在Eclipse下面的方式给了我一个错误,不允许我在for循环的第二条语句中使用switch(n)。我想做的是写…Java 在for循环中使用switch语句,java,Java,我有一个关于在for循环中使用switch语句是否合法的问题。它写在Eclipse下面的方式给了我一个错误,不允许我在for循环的第二条语句中使用switch(n)。我想做的是写… 这位老人,他演奏了1 他在我的拇指上玩小摆设 使用for循环和switch语句是否有更好的方法解决下面的问题?我想用不同的数字和不同的案例写出10个不同的段落。所以一个拇指,两个鞋子,三个膝盖。。。。直到10点 import acm.program.*; public class SingSong extends
这位老人,他演奏了1
他在我的拇指上玩小摆设
使用for循环和switch语句是否有更好的方法解决下面的问题?我想用不同的数字和不同的案例写出10个不同的段落。所以一个拇指,两个鞋子,三个膝盖。。。。直到10点
import acm.program.*;
public class SingSong extends ConsoleProgram {
public void run() {
for (int n = 1; n <= 10; n++) {
println("This old man, he played " + n);
println("He played knick-knack on my" + switch(n));
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came rolling home");
switch (n) {
case 1 : println("thumb"); break;
case 2 : println("shoe"); break;
case 3 : println("knee"); break;
case 4 : println("door"); break;
case 5 : println("hive"); break;
case 6 : println("sticks"); break;
case 7 : println("heaven"); break;
case 8 : println ("pate"); break;
case 9 : println("spine"); break;
case 10 : println("shin"); break;
}
}
}
}
导入acm.program.*;
公共类SingSong扩展控制台程序{
公开募捐{
对于(int n=1;n使用if else
而不是switch语句
if(n==1){
...
}else if(n==2){
...
}
您需要的是一个要调用的方法:
private String which(int n) {
switch (n) {
case 1 : return "thumb";
case 2 : return "show";
case 3 : return "knee";
case 4 : return "door";
case 5 : return "hive";
case 6 : return "sticks";
case 7 : return "heaven";
case 8 : return "pate";
case 9 : return "spine";
case 10 : return "shin";
default: return "";
}
}
然后替换
println("He played knick-knack on my" + switch(n));
与
另一种更简洁的方法是创建字符串数组:
static final String[] which = {
"thumb","show","knee","door","hive", "sticks","heaven","pate","spine","shin"};
然后就用
println("He played knick-knack on my" + which[n]);
这不会调用您的交换机。交换机不是一种方法。
为了获得所需的输出
println("This old man, he played " + n);
println("He played knick-knack on my" );
switch (n){
case 1 : print("thumb"); break;
case 2 : println("shoe"); break;
case 3 : println("knee"); break;
case 4 : println("door"); break;
case 5 : println("hive"); break;
case 6 : println("sticks"); break;
case 7 : println("heaven"); break;
case 8 : println ("pate"); break;
case 9 : println("spine"); break;
case 10 : println("shin"); break;
}
或者更好地遵循@Marko Topolnik方法,我认为这是最好的方法。for循环中的switch/case语句很好,问题是switch不是函数调用。请尝试以下方法:
string obj;
switch (n){
case 1 : obj="thumb"; break;
case 2 : obj="show"; break;
//Etc
}
}
println("This old man, he played " + n);
println("He played knick-knack on my" + obj);
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
创建一个包含整数到字符串映射的Map
,并使用Map.get()
获取字符串:
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "thumb");
// etc
m.put(10, "shin");
println("He played knick-knack on my" + m.get(n));
Map m=newhashmap();
m、 放置(1,“拇指”);
//等
m、 put(10,“shin”);
println(“他在我的“+m.get(n));
您不能这样做:
println("He played knick-knack on my" + switch(n));
如果希望代码大体相同,则应委托给执行切换的方法
替代解决方案包括一系列if
/else if
(有点冗长),或者可能是一个用作查找表的数组
e、 g
我认为,在这种情况下,Map
可能是过火了,除非您使用了非连续索引(不太可能)开关(n)不是函数,不能作为函数使用。对于编译器来说,这就像启动一个switch语句,但执行完全错误,因此返回一个错误。我认为要正确执行此操作,应将case开关放在另一个方法中,或直接放在第二行之后。如下所示:
import acm.program.*;
public class SingSong extends ConsoleProgram {
public void run(){
for ( int n = 1; n <= 10; n++){
println("This old man, he played " + n);
print("He played knick-knack on my ");
switch (n){
case 1 : print("thumb"); break;
case 2 : print("show"); break;
case 3 : print("knee"); break;
case 4 : print("door"); break;
case 5 : print("hive"); break;
case 6 : print("sticks"); break;
case 7 : print("heaven"); break;
case 8 : print("pate"); break;
case 9 : print("spine"); break;
case 10 : print("shin"); break;
}
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
}
}
}
导入acm.program.*;
公共类SingSong扩展控制台程序{
公开募捐{
对于(int n=1;n您正在像使用方法一样使用开关
import acm.program.*;
public class SingSong extends ConsoleProgram
{
public void run()
{
for ( int n = 1; n <= 10; n++)
{
println("This old man, he played " + n);
println("He played knick-knack on my" + getValue(n));
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
}
}
private String getValue(int n)
{
switch (n)
{
case 1 : return "thumb"; break;
case 2 : return "shoe"; break;
case 3 : return "knee"; break;
case 4 : return "door"; break;
case 5 : return "hive"; break;
case 6 : return "sticks"; break;
case 7 : return "heaven"; break;
case 8 : return "pate"; break;
case 9 : return "spine"; break;
case 10 : return "shin"; break;
default : return "VALUE NOT FOUND!!";
}
}
}
导入acm.program.*;
公共类SingSong扩展控制台程序
{
公开募捐
{
对于(int n=1;n'Eclipse给了我一个错误。'详细的错误是什么?错误是…标记“+”上的语法错误“,++expectedThanks各位。我正在阅读所有的建议并尝试它们。你能添加一个理由吗?你能给我一个1和shoe的例子吗?谢谢,但我还没有学习地图。所以我必须坚持使用到目前为止我所学的循环、开关语句和else/else if的材料。谢谢。创建方法是实际的接下来是下一章。我认为问题要简单得多。应该通过使用if/else if方法来解决。谢谢。我还没有学会创建我们自己的方法。这本书希望我们使用if/else if方法来解决问题。这比我使用for/switch方法解决问题要简单得多。
// note arrays are indexed from 0
String[] arrayOfObjects = new String[]{"thumb", ....};
println("He played knick-knack on my" + arrayOfObjects(n-1));
import acm.program.*;
public class SingSong extends ConsoleProgram {
public void run(){
for ( int n = 1; n <= 10; n++){
println("This old man, he played " + n);
print("He played knick-knack on my ");
switch (n){
case 1 : print("thumb"); break;
case 2 : print("show"); break;
case 3 : print("knee"); break;
case 4 : print("door"); break;
case 5 : print("hive"); break;
case 6 : print("sticks"); break;
case 7 : print("heaven"); break;
case 8 : print("pate"); break;
case 9 : print("spine"); break;
case 10 : print("shin"); break;
}
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
}
}
}
import acm.program.*;
public class SingSong extends ConsoleProgram {
public void run(){
for ( int n = 1; n <= 10; n++){
println("This old man, he played " + n);
print("He played knick-knack on my");
switcher(n);
print("\n");
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
}
}
private void switcher(int n){
switch(n){
case 1 : print("thumb"); break;
case 2 : print("show"); break;
case 3 : print("knee"); break;
case 4 : print("door"); break;
case 5 : print("hive"); break;
case 6 : print("sticks"); break;
case 7 : print("heaven"); break;
case 8 : print ("pate"); break;
case 9 : print("spine"); break;
case 10 : print("shin"); break;
}
}
}
import acm.program.*;
public class SingSong extends ConsoleProgram
{
public void run()
{
for ( int n = 1; n <= 10; n++)
{
println("This old man, he played " + n);
println("He played knick-knack on my" + getValue(n));
println("With a knick-knack, paddy-whack,");
println("Give your dog a bone");
println("This old man came roiling home");
}
}
private String getValue(int n)
{
switch (n)
{
case 1 : return "thumb"; break;
case 2 : return "shoe"; break;
case 3 : return "knee"; break;
case 4 : return "door"; break;
case 5 : return "hive"; break;
case 6 : return "sticks"; break;
case 7 : return "heaven"; break;
case 8 : return "pate"; break;
case 9 : return "spine"; break;
case 10 : return "shin"; break;
default : return "VALUE NOT FOUND!!";
}
}
}