0
import javax.swing.JOptionPane;

public class Speler
{

    public String naam;
    public String aantalKeerGespeeld;
    public String behaaldePunten;
    public String spelersInfo;


    public String setNaam(){
        return naam = JOptionPane.showInputDialog("Hoe heet je?");
    }

    public String setAantalKeerGespeeld(){
        return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?");
    }

    public String setBehaaldePunten(){
        return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?");
    }

    public String setSpelersInfo(){
        **return naam = JOptionPane.showInputDialog("Hoe heet je?");
        return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?");
        return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?");**


    }
    public String getNaam(){
        return naam;
    }

    public String getAantalKeerGespeeld(){
        return aantalKeerGespeeld;
    }

    public String getBehaaldePunten(){
        return behaaldePunten;
    }

    public String getSpelersinfo(){
        return naam;
        return aantalKeerGespeeld;
        return behaaldePunten;
    }
}    

看起来我不能返回或设置超过 1 个值。刚开始学习Java,在任何地方都很难找到答案。

4

5 回答 5

3

在仔细查看您的代码之后,我想澄清一些似乎是误解的地方。首先,据我所知,您不需要从任何方法返回多个值。事实上,以单词“set”开头的方法名根本不应该返回任何东西。另一方面,它需要一个参数来“设置”一个变量的值。例如

public void setNaam(String newNaam){
    naam = newNaam;
}

请注意,我不使用 JOptionPane 对话框来获取名称。在代码的这一点上,我们不关心值来自哪里。其他一些方法负责实际从用户那里获取价值。此方法只是存储值以供以后使用。

另外,请注意,您有一个字段声明为

String spelersInfo;

我相信getSpelersInfo()andsetSpelersInfo()应该使用它,这就是为什么我声称您不需要从这些方法中的任何一个返回多个值。

最后,您似乎正在创建我们所说的POJO。有关首字母缩写词含义的更多详细信息,请参阅此链接。

于 2012-09-19T19:05:29.280 回答
2

语句的基本原理return是它使程序离开当前函数(子程序)并从调用函数的地方恢复,即返回地址。
当您输入一个函数时,返回地址会保存在调用堆栈中,因此很容易访问。

因此,对于您的代码,当您发出一个return语句然后另一个语句时,后者将不会被调用。
如果我没记错的话,它甚至不会在大多数编译器上编译。
因此,您需要做的是发出一个返回语句,将所有字符串一起返回。
这可以通过 Java 标准库中提供的许多基本数据结构来完成,如果您不想参与其中,您甚至可以将字符串附加到一个大字符串中,然后再将其拆分。

但现在我建议阅读一本基本的 Java 书籍/教程,甚至是一本关于编程语言的基本书籍。
祝你好运!

链接到一些基本的 Java 数据结构

编辑
正如 Code-Guru 指出的并且是正确的,解决此问题的最佳方法是使用POJO,您可以在他的回答中看到一个很好的解释。

尽管在我看来,阅读一本书并理解基本原理胜过所有技术解决方案

于 2012-09-19T18:50:24.633 回答
1

不,您不能以这种方式返回多个值。

关键字的工作方式return是它会立即将控制权返回给调用代码,使用返回的值作为函数的值。它看到的第一个返回调用将退出函数本身,因此任何后续代码都不会被执行。

通常,您不必以这种方式从函数返回多个值。但是,如果你想返回一个值列表,你可以将它们打包成一个 Container 对象(例如 的对象java.util.Vector)并返回向量对象。但是,在您列出的任何代码中,这似乎都不是必需的。

但是,在您发布的代码中,您似乎不想从函数返回值,而是希望您的类的实例变量由JOptionPane提示设置。return然后,一旦所有这些分配完成,您只需在函数末尾有一个语句。请注意,如果您的函数声明为void(即,它不返回值),则不需要return;在末尾有一行,因为一旦到达方法的末尾,它将退出。有时拥有return;是有用的(例如,如果您有多个返回点),但这是另一个时间研究的主题。

于 2012-09-19T18:48:07.037 回答
0

许多现代语言具有返回多个值的优雅能力,但 java 没有。实际上,您必须选择其他东西。从除效率之外的所有方面来看,100% 可接受的解决方案是返回一个新类的新对象,该类旨在保存一组返回值。IE;

类 TwoStrings { 字符串名称;字符串地址;... }

并在您的代码中 return(new TwoStrings("foo","bar"));

另一个完全可以接受的选择是重构您的界面,以便一次返回一个值是很自然的。如果您想要“getXandY(),请将其重构为 getX() 和 getY()

一个常见的选择是使返回值的容器成为被调用者的参数之一。与其返回“姓名”和“地址”,不如向将加载姓名和地址的函数提供一个“人”(并可能返回成功的指示符)。

不太可接受的方法是使用非特定数组或向量返回多个值

最不可接受的是返回一个值,并隐藏其他值供调用者使用“副作用返回”

于 2012-09-19T19:03:52.287 回答
-1

是的,你是对的,一个方法中不能有多个 return 语句。将 POJO 返回给调用者方法并在那里获取值怎么样?

于 2012-09-19T18:46:54.167 回答