繁体   English   中英

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

[英]Java does not return string from scanner input

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

当我编译下面的代码时,它说 java line # :error:

缺少返回语句。

如果我删除return "not valid"的评论,它会编译。

现在这是另一个问题出现的地方。当我传递作为AB输入的init_configfinal_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM