我正在练习Java而且我遇到了一个奇怪的问题,或者我应该说问题。
当我编译下面的代码时,它说java line#:error:
缺少退货声明。
如果我删除了return "not valid"
所在的评论,则会进行编译。
现在这是其他问题的来源。当我将init_config
和final_config
字符串作为A
和B
传递时,它返回无效。但是,当我将"A"
和"B"
传递给其他函数(other("A", "B")
时,将返回/打印特定的"C"
返回。
我不确定问题是否在于我的输入法。我为init_config和final_config输入的数据应该是字符串值,对吗?我不确定Scanner是否是一个很好的字符串输入法。但是,如果我打印两个输入它工作正常,所以我不确定它是否是数据丢失或字符串引用传递时丢失。
我也尝试用init_config = in.next()
替换init_config = in.nextLine()
,但它没有任何区别。
是否有必要在函数末尾使用return "not valid"
编译代码,还是可以通过某种方法绕过它?如何使用Scanner
输入法传递字符串数据而不会有任何损失?
这是我的代码:
import java.util.Scanner;
public class towerGen
{
public static void main(String[]args)
{
Scanner in = new Scanner(System.in);
String init_config, final_config;
System.out.print("Enter initial configuration: ");
init_config = in.next();
System.out.print("Enter final configuration: ");
final_config = in.next();
System.out.print(other(init_config, final_config));
}
public static String other(String src, String dest)
{
if (src=="A" && dest=="B")
return "C";
if (src=="B" && dest=="A")
return "C";
if (src=="B" && dest=="C")
return "A";
if (src=="C" && dest=="B")
return "A";
if (src=="A" && dest=="C")
return "B";
if (src=="C" && dest=="A")
return "B";
//return "not valid";
}
}
答案 0 :(得分:1)
是否有必要使用return"无效"编译代码?在功能的最后?
是的,确实如此。因为编译器会识别出如果输入字符串不符合您列出的任何条件,则无法返回任何内容,这是非void方法中的错误。
另外,在other
方法中,比较字符串时应使用src.equals("A")
而不是src == "A"
。
答案 1 :(得分:0)
我认为你几乎得到了上述讨论的答案,即
使用等于方法代替 == 。因为 == 检查对象引用是否引用同一个对象而不是其中的内容。
当你调用其他("A", "B")
函数时,想要回答为什么它正在工作,因为它带来了字符串池的概念,值得注意。
但是当我通过" A"和" B"到其他功能(其他(" A"," B")返回/打印特定的返回" C"
当我们创建一个String对象没有 new
运算符(又名String literal)时,它使用String池来获取该对象。如果不存在,它将创建并将其放入字符串池中。字符串池是共享的。如果我们使用new
运算符,它将始终创建一个新的String对象,并且即使存在一个对象也不会引用它。
当您调用other("A", "B")
时,此处的参数指向字符串池中的字符串对象。然后在other(..)
方法执行src=="A"
之类的检查时,它会返回true,因为src
和" A"是指池中相同的字符串对象。
要对此进行测试,您可以尝试使用System.out.print(other(new String("A"), "B"));
,这会再次返回无效。
您可以参考java string with new operator and a literal了解更多信息。
答案 2 :(得分:0)
也许这会对某人有所帮助
import java.util.Scanner;
public class towerGen
{
Scanner in = new Scanner(System.in);
public static void main(String[]args)
{
Scanner in = new Scanner(System.in);
String init_config, final_config;
System.out.print("Enter initial configuration: ");
init_config = in.next();
System.out.print("Enter final configuration: ");
final_config = in.next();
System.out.print(other(init_config, final_config));
}
public static String other(String src, String dest)
{ String C = "C";
String B = "B";
String A = "A";
if ("A".equals(src) && "B".equals(dest))
return C;
if ("B".equals(src) && "A".equals(dest))
return C;
if ("B".equals(src) && "C".equals(dest))
return A;
if ("C".equals(src) && "B".equals(dest))
return A;
if ("A".equals(src) && "C".equals(dest))
return B;
if ("C".equals(src) && "A".equals(dest))
return B;
//return "not valid";
else return null;
}
}