Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从静态上下文引用Java非静态方法addInv(int)_Java_Static_Compiler Errors - Fatal编程技术网

无法从静态上下文引用Java非静态方法addInv(int)

无法从静态上下文引用Java非静态方法addInv(int),java,static,compiler-errors,Java,Static,Compiler Errors,我很清楚这个错误,但这是我第一次被难倒。我知道我不能从main方法调用非静态变量,但这很混乱。也许你能帮忙?该错误显示在addInv(1)上行 代码: import java.io.*; 导入java.util.*; 导入javax.swing.*; 公共类项目 { 公共静态int攻击、防御; 公共静态数组列表arr; 公共静态字符串名称,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins,canEquip; 字符串统计[];

我很清楚这个错误,但这是我第一次被难倒。我知道我不能从main方法调用非静态变量,但这很混乱。也许你能帮忙?该错误显示在
addInv(1)上

代码:

import java.io.*;
导入java.util.*;
导入javax.swing.*;
公共类项目
{
公共静态int攻击、防御;
公共静态数组列表arr;
公共静态字符串名称,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins,canEquip;
字符串统计[];
公共静态void main(字符串参数[])
{
addInv(1);
}
公共无效附加项(int e){
字符串iname=getItem(1)[0];
字符串idesc=getItem(1)[1];
int-itypeOf=Integer.parseInt(getItem(1)[2]);
int-iattackAdd=Integer.parseInt(getItem(1)[3]);
int-idefenseAdd=Integer.parseInt(getItem(1)[4]);
boolean=boolean.parseBoolean(getItem(1)[5]);
boolean icanat=boolean.parseBoolean(getItem(1)[6]);
int iArnedCoins=Integer.parseInt(getItem(1)[7]);
攻击=攻击+添加;
防御=防御+idefenseAdd;
System.out.println(“您拾取:+iname”);
协议添加(“dan”);
System.out.println(“说明:“+idesc”);
}
//项目类型
//0-武器
//1-食物
//2-注册项目
//3-头盔
//4-装甲腿
//5-胸甲
//6-屏蔽
公共字符串[]getItem(int e){
String[]stats=新字符串[7];
String name=“Null”;
字符串desc=“无”;
字符串typeOf=“0”;
字符串attackAdd=“0”;
字符串add=“0”;
字符串canSell=“true”;
字符串canEat=“false”;
字符串挣得的硬币=“0”;
如果(e==1){
name=“鹤嘴锄”;
desc=“可用于采矿。”;
typeOf=“2”;
attackAdd=“2”;
挣硬币=“5”;
}
返回新字符串[]{name,desc,typeOf,attackAdd,defenseAdd,canSell,canEat,earnedCoins};
}
}

谢谢。

在Java中,static意味着它是一个类变量或方法,这意味着该方法或变量在类的所有实例中共享。这也意味着您不需要实例化类来调用该方法。注意:除非你有一个很好的理由使事物保持静态,否则这通常不是一个好主意,因为它会产生一堆全局变量和函数

解决这个问题的正确方法是在main中创建类的实例,然后调用实例上的方法

注2:如果您有多个线程,静态变量就会出现问题,这意味着您需要跨这些线程同步读写

我会看看这个:

编辑:这是没有静态的代码,似乎可以工作

import java.util.ArrayList;

public class Item 
{
    public int attack, defense;
    public ArrayList<String> arr = new ArrayList<String>();
    public String name, desc, typeOf, attackAdd, defenseAdd, canSell,
            canEat, earnedCoins, canEquip;

    String stats[];

    public static void main(String args[]) 
    {
        Item anItem = new Item();
        anItem.addInv(1);
    }

    public void addInv(int e) 
    {
        String iname = getItem(1)[0];
        String idesc = getItem(1)[1];

        // Never read
        //int itypeOf = Integer.parseInt(getItem(1)[2]);
        int iattackAdd = Integer.parseInt(getItem(1)[3]);
        int idefenseAdd = Integer.parseInt(getItem(1)[4]);
        // Never read
        //boolean icanSell = Boolean.parseBoolean(getItem(1)[5]);
        // Never Read
        //boolean icanEat = Boolean.parseBoolean(getItem(1)[6]);
        // Never Read
        //int iearnedCoins = Integer.parseInt(getItem(1)[7]);

        attack = attack + iattackAdd;
        defense = defense + idefenseAdd;
        System.out.println("You picked up: " + iname);
        arr.add("dan");
        System.out.println("Description: " + idesc);

    }

    // Types of Items
    // 0 - Weapon
    // 1 - Food
    // 2 - Reg Item
    // 3 - Helmet
    // 4 - Armor Legs
    // 5 - Chest Armor
    // 6 - Shield

    public String[] getItem(int e) 
    {
        // Never read
        // String[] stats = new String[7];
        String name = "Null";
        String desc = "None";
        String typeOf = "0";
        String attackAdd = "0";
        String defenseAdd = "0";
        String canSell = "true";
        String canEat = "false";
        String earnedCoins = "0";

        if (e == 1) {

            name = "Pickaxe";
            desc = "Can be used to mine with.";
            typeOf = "2";
            attackAdd = "2";
            earnedCoins = "5";
        }

        return new String[] { name, desc, typeOf, attackAdd, defenseAdd,
                canSell, canEat, earnedCoins };
    }
}
import java.util.ArrayList;
公共类项目
{
公众攻击、防御;
public ArrayList arr=new ArrayList();
公共字符串名称、描述、类型、攻击添加、防御添加、canSell、,
canEat,赚来的硬币,canEquip;
字符串统计[];
公共静态void main(字符串参数[])
{
Item anItem=新项();
补充条款(1);
}
公共无效附加项(int e)
{
字符串iname=getItem(1)[0];
字符串idesc=getItem(1)[1];
//从不读书
//int-itypeOf=Integer.parseInt(getItem(1)[2]);
int-iattackAdd=Integer.parseInt(getItem(1)[3]);
int-idefenseAdd=Integer.parseInt(getItem(1)[4]);
//从不读书
//boolean=boolean.parseBoolean(getItem(1)[5]);
//从不读书
//boolean icanat=boolean.parseBoolean(getItem(1)[6]);
//从不读书
//int iArnedCoins=Integer.parseInt(getItem(1)[7]);
攻击=攻击+添加;
防御=防御+idefenseAdd;
System.out.println(“您拾取:+iname”);
协议添加(“dan”);
System.out.println(“说明:“+idesc”);
}
//项目类型
//0-武器
//1-食物
//2-注册项目
//3-头盔
//4-装甲腿
//5-胸甲
//6-屏蔽
公共字符串[]getItem(int e)
{
//从不读书
//String[]stats=新字符串[7];
String name=“Null”;
字符串desc=“无”;
字符串typeOf=“0”;
字符串attackAdd=“0”;
字符串add=“0”;
字符串canSell=“true”;
字符串canEat=“false”;
字符串挣得的硬币=“0”;
如果(e==1){
name=“鹤嘴锄”;
desc=“可用于采矿。”;
typeOf=“2”;
attackAdd=“2”;
挣硬币=“5”;
}
返回新字符串[]{name,desc,typeOf,attackAdd,defenseAdd,
canSell、canEat、Earned Coins};
}
}

静态在Java中表示它是一个类变量或方法,这意味着该方法或变量在类的所有实例中共享。这也意味着您不需要实例化类来调用该方法。注意:除非你有一个很好的理由使事物保持静态,否则这通常不是一个好主意,因为它会产生一堆全局变量和函数

解决这个问题的正确方法是在main中创建类的实例,然后调用实例上的方法

注2:如果您有多个线程,静态变量就会出现问题,这意味着您需要跨这些线程同步读写

我会看看这个:

编辑:这是没有静态的代码,似乎可以工作

import java.util.ArrayList;

public class Item 
{
    public int attack, defense;
    public ArrayList<String> arr = new ArrayList<String>();
    public String name, desc, typeOf, attackAdd, defenseAdd, canSell,
            canEat, earnedCoins, canEquip;

    String stats[];

    public static void main(String args[]) 
    {
        Item anItem = new Item();
        anItem.addInv(1);
    }

    public void addInv(int e) 
    {
        String iname = getItem(1)[0];
        String idesc = getItem(1)[1];

        // Never read
        //int itypeOf = Integer.parseInt(getItem(1)[2]);
        int iattackAdd = Integer.parseInt(getItem(1)[3]);
        int idefenseAdd = Integer.parseInt(getItem(1)[4]);
        // Never read
        //boolean icanSell = Boolean.parseBoolean(getItem(1)[5]);
        // Never Read
        //boolean icanEat = Boolean.parseBoolean(getItem(1)[6]);
        // Never Read
        //int iearnedCoins = Integer.parseInt(getItem(1)[7]);

        attack = attack + iattackAdd;
        defense = defense + idefenseAdd;
        System.out.println("You picked up: " + iname);
        arr.add("dan");
        System.out.println("Description: " + idesc);

    }

    // Types of Items
    // 0 - Weapon
    // 1 - Food
    // 2 - Reg Item
    // 3 - Helmet
    // 4 - Armor Legs
    // 5 - Chest Armor
    // 6 - Shield

    public String[] getItem(int e) 
    {
        // Never read
        // String[] stats = new String[7];
        String name = "Null";
        String desc = "None";
        String typeOf = "0";
        String attackAdd = "0";
        String defenseAdd = "0";
        String canSell = "true";
        String canEat = "false";
        String earnedCoins = "0";

        if (e == 1) {

            name = "Pickaxe";
            desc = "Can be used to mine with.";
            typeOf = "2";
            attackAdd = "2";
            earnedCoins = "5";
        }

        return new String[] { name, desc, typeOf, attackAdd, defenseAdd,
                canSell, canEat, earnedCoins };
    }
}
import java.util.ArrayList;
公共类项目
{
公众攻击、防御;
public ArrayList arr=new ArrayList();
公共字符串名称、描述、类型、攻击添加、防御添加、canSell、,
canEat,赚来的硬币,canEquip;
字符串统计[];
    public static void main(String args[])
    {
        item it = new item();
        it.addInv(1);
    }
public class Item {
    ...

    public static void main(String args[]) {
        addInv(1);
    }

    public static void addInv(int e) {
        ...
    }

    public static String[] getItem(int e) {
        ...
    }
}
public class Item {
    ...

    public static void main(String args[]) {
        Item item = new Item();
        item.addInv(1);
    }

}
public static void addInt(int e)