如何从main、java访问变量
我在尝试使HashMap可供其所在类中的其他方法访问时遇到困难 这就是我想做的如何从main、java访问变量,java,jvm,Java,Jvm,我在尝试使HashMap可供其所在类中的其他方法访问时遇到困难 这就是我想做的 class object method main this.test=9 method fire output this.test 这是真正的代码 import java.util.*; import java.lang.String; import java.util.HashMap; public class problem { public HashM
class object
method main
this.test=9
method fire
output this.test
这是真正的代码
import java.util.*;
import java.lang.String;
import java.util.HashMap;
public class problem {
public HashMap dict;
public problem() {
HashMap<String, String[]> dict = new HashMap<String, String[]>();
// put everything into hashmap
String[] items = { "toys", "sun" };
dict.put("animal", items);
String[] items_2 = { "fun", "games" };
view.put("human", items_2);
this.view = view;
// start
this.BeginM();
}
public void BeginM() {
System.out.println(this.view.get("human")[0]); // should give "fun"
}
}
我相信this.view.gethuman会返回字符串,而不是数组。您需要使用this.view.gethuman.charAt0而不是this.view.gethuman[0],因为Java字符串不能像数组那样被索引。更改:顺便说一句,示例中缺少了
Map view = new HashMap<String,String[])
到
你知道吗?我曾经有过这样的一段日子,不管你怎么努力,都没有什么能正常工作,所以,为了让某些东西真正正常工作,我要修改你的代码 我有时看到人们在这里完全重写了一些奇怪的问题,我一直想知道为什么!?现在我知道了,这是为了补偿有一天你的一个虚拟机无缘无故地崩溃,你有一个无法复制的bug,直到你把目光移开,你的狗忘记了自己的家庭训练 无论如何,您需要弄清楚是否希望将该变量称为dict或view。选择一个,但你需要坚持下去。我真的不在乎,但我用的是dict。如果你喜欢另一个,嘿,这是你的代码,做你喜欢的!但不要两者都用,那样会让人困惑 你的问题是,在你的领域,你只是在使用HashMap。使用精美的字体或演员。否则,HashMap只保存对象。对象不是字符串[]。因此,您要么需要将get to String[]的结果强制转换为一个字符串[],要么您可以忘记所有这些,使用奇特的类型良好的东西,有时我们称之为泛型。我将使用别致的类型良好的HashMap,但正如我所说的——这是你的代码,如果你想的话,可以强制转换 无论如何,这让我们能够:
public class problem
{
HashMap<String, String[]> dict;
public problem()
{
HashMap<String, String[]> dict = new HashMap<String, String[]>();
// put everything into hashmap
String[] items =
{
"toys", "sun"
};
dict.put("animal", items);
String[] items_2 =
{
"fun", "games"
};
dict.put("human", items_2);
this.dict = dict;
// start
this.BeginM();
}
public void BeginM()
{
System.out.println(this.dict.get("human")[0]); // should give "fun"
}
}
那我在那里做了什么?首先,我把这个问题大写。类名以大写字母开头是一种惯例。当然,这不是强制性的,但拥有它很好,特别是当你与其他开发人员合作时。举个例子:我认为问题的构造函数是一个缺少返回值的方法!另外,我将dict设置为final和private,这样以后就不会意外地覆盖该字段。我把它做成了私人的,这是一个很好的设计。如果其他人需要访问它,我们可以给他们一个访问器方法。最后,我摆脱了这个,因为我不太喜欢它-但是,嘿,还是你的代码,如果你想放回去的话 有趣的巧合-你漏掉了导致问题的代码行。恰克,他没有漏掉任何东西。但是,上面的内容不会被编译是正确的。我喜欢编辑流,这会让这个问题变得不那么可读。我不认为this.view.gethuman可以返回任何内容,因为this.view在任何地方都没有定义。但是我认为其目的是,尽管我承认,很难说是有一个HashMap,这意味着是的,view.gethuman将返回一个数组。view被暗示为HashMap,因为他访问它的方式。get是在Map类中定义的。我认为编译器不会因为隐含而自动创建变量。如果是这样的话,我需要开始使用它。我不是说他的代码可以编译。我只是说我们可以推断变量数据类型。我更关注于描述语法错误,而不是他混乱的结构。我明白了。我同意我们可以推断它,我建议作者打算使用HashMap,这将使gethuman[0]完全合法。是的,我知道它没有编译,并且我知道特定的错误是由于类型Map的var上缺少泛型造成的。这孩子只是想学习Java,他需要一点指导。缺少地图上的类型只会在代码中出现一些警告,而不是错误。他的问题是关于变量的名称和主函数,他还没有公布。@LuiggiMendoza-不是corret。对于他的用法map.getx[0],缺少的泛型会导致编译错误。表达式的类型必须是数组类型,但已解析为Object。试试看。@ChuckFricano在这里显然是正确的。非泛型HashMap相当于HashMap,因此需要强制转换。@LuiggiMendoza-我的解决方案是正确的。可能还有其他的。在这种情况下,缺少的泛型会导致错误,而不是警告,正确使用泛型可以纠正问题。铸造是不安全的。这就是泛型被添加到Java中的原因。+1,因为你度过了艰难的一天,这是对一个格式不好的问题的一个不错的回答。哇,太棒了,我很高兴我得到了一个解释得很好的答案,谢谢@保瓦格兰:谢谢!我最初的评论毫无用处,因此我决定可能应该忏悔并写一个恰当的答案。
Map<String,String[]> view = new HashMap<String,String[])
public class problem
{
HashMap<String, String[]> dict;
public problem()
{
HashMap<String, String[]> dict = new HashMap<String, String[]>();
// put everything into hashmap
String[] items =
{
"toys", "sun"
};
dict.put("animal", items);
String[] items_2 =
{
"fun", "games"
};
dict.put("human", items_2);
this.dict = dict;
// start
this.BeginM();
}
public void BeginM()
{
System.out.println(this.dict.get("human")[0]); // should give "fun"
}
}
public class Problem
{
private final HashMap<String, String[]> dict;
public void Problem()
{
dict = new HashMap<String, String[]>();
dict.put("animal", new String[] { "toys, "sun" });
dict.put("human", new String[] { "fun", "games" });
BeginM();
}
public void BeginM()
{
System.out.println(dict.get("human")[0]);
}
}