首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java不从扫描器输入返回字符串

Java不从扫描器输入返回字符串
EN

Stack Overflow用户
提问于 2016-04-02 07:15:37
回答 2查看 2.6K关注 0票数 0

我正在练习Java,遇到了一些奇怪的问题,或者我应该说一些问题。

当我编译下面的代码时,代码上写着java行# :error:

丢失返回语句。

如果删除包含return "not valid"的注释,它就会编译。

这就是另一个问题出现的地方。当我将输入的init_configfinal_config字符串作为AB传递时,它返回无效的字符串。但是,当我将"A""B"传递给其他函数(other("A", "B") )时,将返回/打印特定的返回,即"C"

我不确定问题是否在于我的输入方法。我为init_config和final_config输入的数据应该是字符串值,对吗?我不确定Scanner是否是一个好的字符串输入方法。但是,如果我打印这两个输入,它可以正常工作,所以我不确定是数据丢失还是字符串引用在传递时丢失了。

我也尝试用init_config = in.next()代替init_config = in.nextLine(),但是没有什么区别。

是否有必要在函数的末尾使用return "not valid"编译代码,还是可以通过某种方法绕过这一点?如何使用Scanner输入法传递字符串数据而不丢失?

这是我的代码:

代码语言:javascript
复制
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";
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-02 07:19:16

是否有必要编译函数末尾返回“无效”的代码?

是的,是这样的。因为编译器认识到,如果输入字符串不符合您列出的任何条件,就没有什么可返回的,这是非空方法中的一个错误。

此外,在您的other方法中,在比较String时应该使用src.equals("A")而不是src == "A"

票数 1
EN

Stack Overflow用户

发布于 2016-04-02 07:46:47

我想你从上面的讨论中得到了很好的答案,

使用等于方法而不是==。因为==检查两个对象引用是否指向同一个对象,而不是其中的内容。

当您调用其他("A", "B")函数时,它为什么会工作,因为它在图片中引入了字符串池的概念,值得注意。

但当我将"A“和"B”传递给其他函数(“A”、"B")时,返回的是"C“。

当我们创建一个字符串对象而没有 new运算符(也称为String new运算符)时,它使用字符串池来获取该对象。如果不存在,它将创建并放入字符串池中。字符串池是共享的。如果我们使用new操作符,它总是会创建一个新的字符串对象,即使存在,它也不会引用池中的字符串对象。

当您调用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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36370356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档