[英]Java does not return string from scanner input
我正在练习 Java,但遇到了一些奇怪的问题,或者我应该说问题。
当我编译下面的代码时,它说 java line # :error:
缺少返回语句。
如果我删除return "not valid"
的评论,它会编译。
现在这是另一个问题出现的地方。当我传递作为A
和B
输入的init_config
和final_config
字符串时,它返回无效。 但是,当我将"A"
和"B"
传递给其他函数( other("A", "B")
,会返回/打印"C"
的特定返回值。
我不确定问题是否出在我的输入法上。 我为 init_config 和 final_config 输入的数据应该是字符串值,对吗? 我不确定 Scanner 是否是一种好的字符串输入方法。 但是,如果我打印两个输入,它工作正常,所以我不确定它是数据丢失还是字符串引用在传递时丢失。
我也尝试用init_config = in.next()
init_config = in.nextLine()
替换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";
}
}
是否必须在函数末尾使用返回“无效”的代码进行编译?
是的。 因为编译器会认识到,如果输入字符串不满足您列出的任何条件,则没有任何返回值,这是非void方法中的错误。
另外,在other
方法中,比较字符串时,应使用src.equals("A")
而不是src == "A"
。
我认为您从上述讨论中几乎可以得到答案,即
使用equals方法代替== 。 因为==会检查两个对象引用是否都指向同一对象,而不是其中的内容。
在您调用函数other ("A", "B")
,想回答它为什么起作用的原因,因为它在画面中引入了String pool的概念,这一点值得注意。
但是,当我将“ A”和“ B”传递给其他函数(other(“ A”,“ B”)时,将返回/打印“ C”的特定返回。
当我们创建一个没有 new
运算符(又名String文字)的String对象时,它将使用String池来获取该对象。 如果不存在,它将在on上创建并将其放入字符串池。 字符串池是共享的。 而且,如果我们使用new
运算符,它将始终创建一个新的String对象,即使存在,也不会引用池中的那个。
当您调用other("A", "B")
,此处的参数指向字符串池中的字符串对象。 然后在other(..)
方法中,当您执行src=="A"
之类的检查时,它返回true,因为src
和“ A”都引用了池中的同一字符串对象。
要对此进行测试,可以尝试使用System.out.print(other(new String("A"), "B"));
这将再次返回无效 。
您可以使用new运算符和文字引用Java字符串以获取更多信息。
也许这会帮助某人:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.