错误:线程中的异常" main" java.lang.Error:未解决的编译问题

时间:2015-06-16 09:53:20

标签: java

我正在为初学者观看Java教程,在编写代码时我遇到了一些错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error, 'for each' statements are only available if source level is 1.5 or greater
    Arrays cannot be resolved
    Arrays cannot be resolved
    Arrays cannot be resolved

    at Animal.main(Animal.java:389)

我的代码是:

Animal.Java:

import java.util.Scanner;


// A class defines the attributes (fields) and capabilities (methods) of a real world object

public class Animal {

    // static means this number is shared by all objects of type Animal
    // final means that this value can't be changed
    public static final double FAVNUMBER = 1.6180;

    // Variables (Fields) start with a letter, underscore or $
    // Private fields can only be accessed by other methods in the class

    // Strings are objects that hold a series of characters
    private String name;

    // An integer can hold values from -2 ^ 31 to (2 ^ 31) -1
    private int weight;

    // Booleans have a value of true or false
    private boolean hasOwner = false;

    // Bytes can hold the values between -128 to 127
    private byte age;

    // Longs can hold the values between -2 ^ 63 to (2 ^ 63) - 1
    private long uniqueID;

    // Chars are unsigned ints that represent UTF-16 codes from 0 to 65,535
    private char favoriteChar;

    // Doubles are 64 bit IEEE 754 floating points with decimal values
    private double speed;

    // Floats are 32 bit IEEE 754 floating points with decimal values
    private float height;

    // Static variables have the same value for every object 
    // Any variable or function that doesn't make sense for an object to have should be made static
    // protected means that this value can only be accessed by other code in the same package
    // or by subclasses in other packages

    protected static int numberOfAnimals = 0;

    // A Scanner object allows you to except user input from the keyboard
    static Scanner userInput = new Scanner(System.in);

    // Any time an Animal object is created this function called the constructor is called
    // to initialize the object
    public Animal(){

        // Shorthand for numberOfAnimals = numberOfAnimals + 1;
        numberOfAnimals++;

        int sumOfNumbers = 5 + 1;
        System.out.println("5 + 1 = " + sumOfNumbers);

        int diffOfNumbers = 5 - 1;
        System.out.println("5 - 1 = " + diffOfNumbers);

        int multOfNumbers = 5 * 1;
        System.out.println("5 * 1 = " + multOfNumbers);

        int divOfNumbers = 5 / 1;
        System.out.println("5 / 1 = " + divOfNumbers);

        int modOfNumbers = 5 % 3;
        System.out.println("5 % 3 = " + modOfNumbers);

        // print is used to print to the screen, but it doesn't end with a newline \n
        System.out.print("Enter the name: \n");

        // The if statement performs the actions between the { } if the condition is true
        // userInput.hasNextLine() returns true if a String was entered in the keyboard
        if(userInput.hasNextLine()){

            // this provides you with a way to refer to the object itself
            // userInput.nextLine() returns the value that was entered at the keyboard
            this.setName(userInput.nextLine());

            // hasNextInt, hasNextFloat, hasNextDouble, hasNextBoolean, hasNextByte,
            // hasNextLong, nextInt, nextDouble, nextFloat, nextBoolean, etc.

        }

        this.setFavoriteChar();
        this.setUniqueID();

    }

    // It is good to use getter and setter methods so that you can protect your data
    // In Eclipse Right Click -> Source -> Generate Getter and Setters

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public boolean isHasOwner() {
        return hasOwner;
    }

    public void setHasOwner(boolean hasOwner) {
        this.hasOwner = hasOwner;
    }

    public byte getAge() {
        return age;
    }

    public void setAge(byte age) {
        this.age = age;
    }

    public long getUniqueID() {
        return uniqueID;
    }

    // Method overloading allows you to accept different input with the same method name
    public void setUniqueID(long uniqueID) {
        this.uniqueID = uniqueID;

        System.out.println("Unique ID set to: " + this.uniqueID);
    }

    public void setUniqueID() {

        long minNumber = 1;
        long maxNumber = 1000000;

        // Generates a random number between 1 and 1000000
        this.uniqueID = minNumber + (long)(Math.random() * ((maxNumber - minNumber) + 1));

        // You can cast from one primitive value into another by putting what you want between ( )
        // (byte) (short) (long) (double)
        // (float), (boolean) & (char) don't work.
        // (char) stays as a number instead of a character

        // You convert from a primitive to a string like this
        String stringNumber = Long.toString(maxNumber);

        // Byte.toString(bigByte); Short.toString(bigShort); Integer.toString(bigInt);
        // Float.toString(bigFloat); Double.toString(bigDouble); Boolean.toString(trueOrFalse);

        // You convert from a String to a primitive like this
        int numberString = Integer.parseInt(stringNumber);

        // parseShort, parseLong, parseByte, parseFloat, parseDouble, parseBoolean

        System.out.println("Unique ID set to: " + this.uniqueID);
    }

    public char getFavoriteChar() {
        return favoriteChar;
    }

    public void setFavoriteChar(char favoriteChar) {
        this.favoriteChar = favoriteChar;
    }

    public void setFavoriteChar() {

        int randomNumber = (int) (Math.random() * 126) + 1;

        this.favoriteChar = (char) randomNumber;

        // if then else statement
        // > < == != >= <=
        if(randomNumber == 32){

            System.out.println("Favorite character set to: Space");

        } else if(randomNumber == 10){

            System.out.println("Favorite character set to: New Line");

        } else {

            System.out.println("Favorite character set to: " + this.favoriteChar);

        }

        // Logical operators
        // ! : Converts the boolean value to its right to its opposite form ie. true to false
        // & : Returns true if boolean value on the right and left are both true (Always evaluates both boolean values)
        // && : Returns true if boolean value on the right and left are both true (Stops evaluating after first false)
        // | : Returns true if either boolean value on the right or left are true (Always evaluates both boolean values)
        // || : Returns true if either boolean value on the right or left are true (Stops evaluating after first true)
        // ^ : Returns true if there is 1 true and 1 false boolean value on the right or left

        if((randomNumber > 97) && (randomNumber < 122)){

            System.out.println("Favorite character is a lowercase letter");

        }

        if(((randomNumber > 97) && (randomNumber < 122)) || ((randomNumber > 64) && (randomNumber < 91))){

            System.out.println("Favorite character is a letter");

        }

        if(!false){

            System.out.println("I turned false to " + !false);

        }

        // The ternary operator assigns one or another value based on a condition
        int whichIsBigger = (50 > randomNumber) ? 50 : randomNumber;

        System.out.println("The biggest number is " + whichIsBigger);

        // The switch statement is great for when you have a limited number of values
        // and the values are int, byte, or char unless you have Java 7 which allows Strings
        switch(randomNumber){

        case 8 :
            System.out.println("Favorite character set to: Backspace");
            break;

        case 9 :
            System.out.println("Favorite character set to: Horizontal Tab");
            break;

        case 10 :
        case 11 :
        case 12 :
            System.out.println("Favorite character set to: Something else weird");
            break;

        default :
            System.out.println("Favorite character set to: " + this.favoriteChar);
            break;

        }

    }

    public double getSpeed() {
        return speed;
    }

    public void setSpeed(double speed) {
        this.speed = speed;
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    protected static int getNumberOfAnimals() {
        return numberOfAnimals;
    }

    // Since numberOfAnimals is Static you must set the value using the class name
    public void setNumberOfAnimals(int numberOfAnimals) {
        Animal.numberOfAnimals = numberOfAnimals;
    }

    protected static void countTo(int startingNumber){

        for(int i = startingNumber; i <= 100; i++){

            // continue is used to skip 1 iteration of the loop
            if(i == 90) continue;

            System.out.println(i);

        }

    }

    protected static String printNumbers(int maxNumbers){

        int i = 1;
        while(i < (maxNumbers / 2)){

            System.out.println(i);
            i++;

            // This isn't needed, but if you want to jump out of a loop use break
            if(i == (maxNumbers/2)) break;

        }

        Animal.countTo(maxNumbers/2);

        // You can return a value like this
        return "End of printNumbers()";

    }

    protected static void guessMyNumber(){

        int number;

        // Do while loops are used when you want to execute the code in the braces at least once
        do {

            System.out.println("Guess my number up to 100");

            // If what they entered isn't a number send a warning
            while(!userInput.hasNextInt()){

                String numberEntered = userInput.next();
                System.out.printf("%s is not a number\n", numberEntered);

            }
            number = userInput.nextInt();

        }while(number != 50);

        System.out.println("Yes the number was 50");

    }

    // This will be used to demonstrate polymorphism
    public String makeSound(){

        return "Grrrr";

    }

    // With polymorphism we can refer to any Animal and yet use overridden methods 
    // in the specific animal type
    public static void speakAnimal(Animal randAnimal){

        System.out.println("Animal says " + randAnimal.makeSound());

    }

    // public allows other classes to use this method
    // static means that only a class can call for this to execute 
    // void means it doesn't return a value when it finishes executing
    // This method can except Strings that can be stored in the String array args when it is executed

    public static void main(String[] args){

        Animal theDog = new Animal();

        System.out.println("The animal is named " + theDog.getName());

        System.out.println(Animal.printNumbers(100));

        Animal.countTo(100);

        Animal.guessMyNumber();

        // An array is a fixed series of boxes that contain multiple values of the same data type
        // How you create arrays
        // int[] favoriteNumbers;
        // favoriteNumbers = new int[20];

        int[] favoriteNumbers = new int[20];

        favoriteNumbers[0] = 100;

        String[] stringArray = {"Random", "Words", "Here"};

        // for(dataType[] varForRow : arrayName)
        for(String word : stringArray)
        {

            System.out.println(word);

        }

        // This is a multidimensional array
        String[][][] arrayName = { { { "000" }, { "100" }, { "200" }, { "300" } },
                 { { "010" }, { "110" }, { "210" }, { "310" } }, 
                 { { "020" }, { "120" }, { "220" }, { "320" } }};

        for(int i = 0; i < arrayName.length; i++)
        {
            for(int j = 0; j < arrayName[i].length; j++)
            {

                for(int k = 0; k < arrayName[i][j].length; k++)
                {
                    System.out.print("| " + arrayName[i][j][k] + " ");

                }
            }

            System.out.println("|");

        }

        // You can copy an array (stringToCopy, indexes to copy)
        String[] cloneOfArray = Arrays.copyOf(stringArray, 3);

        // You can print out the whole array
        System.out.println(Arrays.toString(cloneOfArray));

        // Returns the index or a negative number
        System.out.println(Arrays.binarySearch(cloneOfArray, "Random"));

    }
}

Dog.Java

public class Dog extends Animal{

    public Dog() {


    }

    // You can override Animal methods
    public String makeSound(){

        return "Woof";

    }

    public static void main(String[] args) {

        Dog fido = new Dog();

        fido.setName("Fido");

        System.out.println(fido.getName());

    }

}

Cat.java

    public static void main(String[] args) {

        Animal fido = new Dog();

        Animal fluffy = new Cat();

        // We can have an array of Animals that contain more specific subclasses
        // Any overridden methods are used instead because of polymorphism
        Animal[] theAnimals = new Animal[10];

        theAnimals[0] = fido;
        theAnimals[1] = fluffy;

        System.out.println("Fido says " + theAnimals[0].makeSound());
        System.out.println("Fluffy says " + theAnimals[1].makeSound());

        // We can also pass subclasses of Animal and they just work
        speakAnimal(fluffy);

    }

}

我在这里看到了其他一些答案并且读到我必须添加import java.util.Scanner;

我已经拥有..

请告诉我代码中的问题...... 谢谢!

2 个答案:

答案 0 :(得分:0)

问题从错误消息 -

中可以清楚地看出
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error, 'for each' statements are only available if source level is 1.5 or greater

您需要java 1.5或更高版本,您可以从here下载最新的Java JDK

或者你可以像终极所说的那样做,并使你的循环兼容低版本的java(虽然我建议升级到1.5以上,1.5就像非常非常老的版本)。

答案 1 :(得分:0)

for(String word : stringArray)是一个所谓的“for each”循环 - Java 1.5中添加了一个便利。

但似乎您的编译器配置在1.5以下,因此它不支持每个循环。

所以你可以:

  • 更改编译器级别
  • 将循环更改为1.4兼容

    String[] stringArray = {"Random", "Words", "Here"};
    String word;
    for(int i = 0; i < stringArray.length; i++)
    {
        word = stringArray[i];
        System.out.println(word);
    }
    

    (实际上这就是编译器会为你做的......)