-1

Sorry if I am making no sense, I dont have much practise

Hello, I have set up Items to hold a set of chars which are meant to be placed on a text based map, however when i am asking for the char, there is an error stating that it must be a string type. Is there any way to convert my Items to strings, or allow the input of an Item? Thanks in advance

The error is where the user is trying to enter a symbol. I understand i may be able to use string.valueof, however im unsure where to implement it.

//imports
import java.util.Scanner;
import java.util.Random;


public class main {

    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        ABug[] BugObj = new ABug[4]; //Creating object BugObj of class ABug
        int loop = 4;
        int i = 0;
        int cycles;
        MyClass worldnew = new MyClass();

        System.out.println("Please enter the number of cycles you wish to run:");   
        cycles = reader.nextInt(); //getting the amount of cycles to be run
        System.out.print("____Current World____\n\n");
        worldnew.printWorld(); //calling method to print out world

        System.out.println("____Key____\n_F_ - Food\n_O_ - Object\n_ _ - Space\nSymbol - Bug");


        do{
            BugObj[i] = new ABug();  //creating instance

            System.out.print("Please enter the symbol which you wish to represent the bug:");
            BugObj[i].symbol = reader.next();
            System.out.print("Please enter the name of the bug:");
            BugObj[i].name = reader.next(); 
            System.out.println("Please enter the species of the bug:");   
            BugObj[i].species = reader.next(); 
            System.out.println("Please enter the horizontal position of the bug:");   
            BugObj[i].horpos = reader.nextInt();
            System.out.println("Please enter the vertical postion of the bug:");   
            BugObj[i].vertpos = reader.nextInt();   

            System.out.println("_______________ Bug " +(+i+1) + " _______________\n" );
            System.out.println("Symbol: " + BugObj[i].symbol);     //Printing bug information out
            System.out.println("Name: " + BugObj[i].name);           
            System.out.println("Species: " + BugObj[i].species);
            System.out.println("Horizontal Position: " + BugObj[i].horpos);
            System.out.println("Vertical Postion: " + BugObj[i].vertpos + "\n\n");
            move(BugObj[i], worldnew);

            i++;
            System.out.println("Would you like to enter another bug? \n 0-No,  1-Yes\n");
            loop = reader.nextInt();
        }while(loop == 1);
    }


    public static void move(ABug bug, MyClass worldnew){
        Scanner reader = new Scanner(System.in);
        System.out.println("Would you like this bug to move?\n 0-No,  1-Yes\n");
        if (reader.nextInt() == 0)
        {
            System.exit(0);
        }

        int x = bug.horpos;
        int y = bug.vertpos;
        Item a = bug.symbol;

        worldnew.setMap(x,y,bug.symbol);
        worldnew.printWorld();

        //get corordinate of bug
        //set map[coor] = symbol
        //print out map
        //int r = (int) (Math.random() * (2- -2)) + -2;
        //int originalHorpos = bug.horpos;
        //int originalVertpos = bug.vertpos;
        //bug.horpos = originalHorpos + r;
        //bug.vertpos = originalVertpos + r;


        //bug.horpos += r; 
        //bug.vertpos += r;

        System.out.println("New Horizontal Position: " +bug.horpos );
        System.out.println("New Vertical Postion: " +bug.vertpos);

    }
}


enum Item {
    OBJECT ('O'),FOOD ('F'), SPACE (' ');

    private final char symbol;
    Item(char symbol) {
        this.symbol = symbol;
    }
    char getSymbol() { return symbol; }
}
class MyClass {

    public void setMap(int x, int y, Item symbol)
    {
        this.map[x][y] = symbol;
    }
    Item[][] map = new Item[15][25];
    public void printWorld() {

        int v, h; //v - vert, h - hor

        for (v=1; v<=15; ++v)
        {
            for (h=1; h<=25; ++h)
            {


                final Item[] items = {Item.OBJECT, Item.FOOD, Item.SPACE, Item.SPACE, Item.SPACE, Item.SPACE, Item.SPACE, Item.SPACE};
                Random random = new Random();
                int selection = random.nextInt(items.length);
                map[v-1][h-1] = items[selection];
                System.out.print(map[v-1][h-1].getSymbol() + "_"); 


            }
            System.out.printf("\n");
        } 
    }
}
class ABug {                 //ABug class
    int horpos, vertpos, energy, id;
    String species, name;
    Item symbol;

}
Logic
  • 41
  • 7
  • Please print your stacktrace – therealprashant Nov 15 '15 at 16:20
  • Error: Main method not found in class buglife.main, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application. ? – Logic Nov 15 '15 at 16:23
  • Use `public static void main(String[] args)` to define your main method. – khelwood Nov 15 '15 at 16:24
  • thanks, Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from String to Item. I think this is where i need to change item or string? – Logic Nov 15 '15 at 16:25

1 Answers1

2

The problem here is that ABug.symbol is an Item enum type, not a String. You need a method to convert between the two. Add this method to Item:

    public static Item findItemType(String symbol) {
        for(Item i : Item.values()) {
            if(String.valueOf(i.getSymbol()).equals(symbol)) {
                return i;
            }
        }
        return null;
    }

Then, change your main() method to use it:

            System.out.print("Please enter the symbol which you wish to represent the bug:");
            BugObj[i].symbol = Item.findItemType(reader.next());
            if(BugObj[i].symbol == null) {
                //Bad symbol!
            }
Simon DeWolf
  • 400
  • 3
  • 10