我正在尝试解决的问题是撰写一个段落,当我说1
时,我的节目在我歌曲的第二行显示thumb
。当我的节目说2
时,我应该在我的第二行歌曲中说shoe
。我的程序没有像我计划的那样工作,我不确定我是否在for
循环内正确使用switch语句,或者我的程序序列是否错误。
import acm.program.*;
public class SingChildSong extends ConsoleProgram {
public void run() {
for (int i = 1; i < 3; i++){
println ("This old man, he played" + i);
switch (i) {
case 1: println("thumb"); break;
case 2: println("shoe"); break;
case 3: println("knee"); break;
}
println ("He played knick-knack on my" + (i));
println ("With a knick-knack, paddy-whack");
println ("Give your dog a bone.");
println ("This old man came rolling home.");
println ( "" );
}
}
}
答案 0 :(得分:3)
这不是switch语句,而是for循环。当i小于3时,循环终止,而当它小于或等于'&lt; ='时,循环终止
测试它的一种懒惰方法是将i的值打印为快速而肮脏的测试。如果你想要花哨,你可以添加一个断点并在循环中检查i的值。更好的是,进行JUnit测试,因为主要方法适用于sissies。
@Test
public void tester(){
// I <3 zero
for( int i = 0; i < 3; i++ ) {
String bodyPart = getBodyPart(i);
// Dumb test example
if( i == 0 ) {
assertTrue( "thumb" == bodyPart );
} else if ( i == 1 ) {
assertTrue( "shoe" == bodyPart );
} else if ( i == 2 ) {
assertTrue( "knee" == bodyPart );
}
}
}
public String getBodyPart(int i) {
switch(i){
case 1:
return "thumb";
case 2:
return "shoe";
case 3:
return "knee";
default:
return null;
}
}
答案 1 :(得分:3)
如果我做对了你打算这样做:
...
for (int i = 1; i <= 3; i++){
System.out.println ("This old man, he played " + i);
String word;
switch (i) {
case 1: word = "thumb"; break;
case 2: word = "shoe"; break;
case 3: word = "knee"; break;
}
System.out.println ("He played knick-knack on my " + word);
System.out.println ("With a knick-knack, paddy-whack");
System.out.println ("Give your dog a bone.");
System.out.println ("This old man came rolling home.");
System.out.println ( "" );
}
...
正如你所说,你的书中尚未研究过字符串,没有字符串的正确答案应该是:
...
for (int i = 1; i <= 3; i++){
System.out.println ("This old man, he played " + i);
switch (i) {
case 1:
System.out.println ("He played knick-knack on my thumb");
break;
case 2:
System.out.println ("He played knick-knack on my shoe");
break;
case 3:
System.out.println ("He played knick-knack on my knee");
break;
}
System.out.println ("With a knick-knack, paddy-whack");
System.out.println ("Give your dog a bone.");
System.out.println ("This old man came rolling home.");
System.out.println ( "" );
}
...
答案 2 :(得分:0)
好的,如果您尚未学习字符串,请考虑您希望它显示的顺序。 抱歉,我之前犯了一个错误,现在我已经正确编辑了答案。
public void run() {
for (int i = 1; i <= 3; i++){
println ("This old man, he played " + i);
println ("He played knick-knack on my");
//print your word
switch (i) {
case 1: println("thumb"); break;
case 2: println("shoe"); break;
case 3: println("knee"); break;
}
println ("With a knick-knack, paddy-whack");
println ("Give your dog a bone.");
println ("This old man came rolling home.");
println ( "" );
}
}
答案 3 :(得分:0)
你永远不会将字符串赋给i,这将是致命的,因为它是你的循环的计数器变量。我想你必须使用switch语句,所以我将发布一个有效的解决方案,然后解释它的工作原理。
for( int i=0; i<3; i++){
println ("This old man, he played" + i);
String instrument;
switch (i) {
case 0: instrument = "thumb"; break;
case 1: instrument = "shoe"; break;
case 2: instrument = "knee"; break;
}
println ("He played knick-knack on my " + instrument);
println ("With a knick-knack, paddy-whack");
println ("Give your dog a bone.");
println ("This old man came rolling home.");
println ( "" );
}
变量i只是循环的计数器,因此如果打印i,则打印数字。
这就是为什么我在switch语句之前定义了一个String变量“instrument”,然后将它分配给适当的值(记住,循环从0开始计数,所以你必须调整你的情况或你的循环,你也可以为(int i = 1; i <4; i ++))
答案 4 :(得分:0)
for (int i = 1; i < 3; i++)
您的for循环块将停在i = 3
。这意味着i < 3
等于false。
答案 5 :(得分:0)
为什么在run方法中有这个? Run是Thread和Runnable对象中的一种特殊方法,用于多线程。
要运行程序,您应该尝试将其移动到另一种方法。尝试将其移至主要区域。
另外,你正在打印i,而不是单词。试试:
public class Song{
public static void main(String[] args){
String[] arr = {"thumb","shoe","knee"};
for (int i = 0 ; i < 3 ; i++){
System.out.println("this old man he played "+arr[i]);
}
}
}
这样就不需要switch语句了。
答案 6 :(得分:0)
您需要:
System.out.println
代替println
或 import static java.lang.System.out.println;
。鉴于你在书的早期,你可能还不够import static
- 它是一个相当先进的结构。因此,请使用解决方案 1 。
System.out.println("He played knick-knack on my" + (i));
编辑:此外,其他一些人提出了一个很好的观点 - 使用public static void main(String args[])
,而不是run()
方法。运行Java程序时,它会调用main()
,而不是run()
。