Ошибка: тип Int не может быть преобразован в класс - PullRequest
0 голосов
/ 14 мая 2018

США Класс

 public class UnitedStates
{
// instance variables
private ArrayList <State> states;

public UnitedStates()
{
   states = new ArrayList <State> ();


   readFile();
   printStates();

   searchStates();  
}

public void searchStates()
{
    Scanner keyboard = new Scanner(System.in);
    String ans = "y";
    System.out.println();
    System.out.println("=====================");
    System.out.println("     Searching");
    System.out.println("=====================");

    while(ans.equalsIgnoreCase("y"))
    {
        System.out.println();
        System.out.print("Enter state -->");
        String stateName = keyboard.nextLine();

                    State state = binarySearch(stateName);

        if(state == null)
           System.out.println("State not found");
        else
        {
          System.out.println();
          System.out.println("State Name       = " + state.getName());
          System.out.println("State Capital    = " + state.getCapital());
          System.out.println("State Nickname   = " + state.getNickname());
          System.out.println("State Population = " + state.getPopulation());
          System.out.println(); 
        }


        System.out.println();
        System.out.print("Search again[Y/N]?");
        ans = keyboard.nextLine();

    }
}

// Performs a binarySearch on states searching for key
// If key is found it returns the State object that
// corresponds to key; otherwise it returns -1
public State binarySearch(String key)
{
        int left = 0;
        int right = states.size() - 1;

        while(left <= right)
        {
            int midpoint = (left + right) / 2;

            int result = states.get(midpoint).compareTo(key);

            if(result == 0)
            {    
                return midpoint;
            }
            else if(result < 0)
            {
                left = midpoint + 1;
            }
            else
            {
                right = midpoint - 1;
            }

}
        return -1;
    }

public void printStates()
{
    for(State s : states)
    {
        System.out.printf("%-15s", s.getName());
        System.out.printf("%-15s", s.getCapital());
        System.out.printf("%-25s", s.getNickname());
        System.out.printf("%10s\n", s.getPopulation()); 
    }
}

public void readFile()
{
    Scanner scan = null;
    try
    {
        scan = new Scanner(new File("states.txt"));
    }
    catch(FileNotFoundException ex)
    {
        System.out.println("File not Found!");
    }

    String name;
    String capital;
    String nickname;
    int population;
    while(scan.hasNextLine())
    {
        name = scan.nextLine();
        capital = scan.nextLine();
        nickname = scan.nextLine();
        population = scan.nextInt();
        if(scan.hasNextLine())
        {
          String dummy = scan.nextLine();   
        }


        State state = new State(name, capital, nickname, population);
        states.add(state);
    }



}
}

Штатный класс

 public class State implements Comparable
 {
// instance variables
private String name;
private String capital;
private String nickname;
private int population;

public State(String n, String c, String nn, int p)
{
    name = n;
    capital = c;
    nickname = nn;
    population = p;
}


    public String getName()
{
    return name;
}

public String getCapital()
{
    return capital;
}

public String getNickname()
{
    return nickname;
}

public int getPopulation()
{
    return population;
}

// Comparable Interface method
// Casts obj to a String, then calls the String class's
// compareTo method to compare the name of this state
// to the name passed in the parameter list. It returns
// either a positive number, negative number, or zero.

@Override
public int compareTo(Object otherState) 
{
   String otherName = ((State)otherState).getName();

   return name.compareTo(otherName);
}

}

Мне известно, что форматирование ужасно.Однако в строках 73 и 85 я пытаюсь устранить ошибку, в которой говорится: «Несовместимые типы: int нельзя преобразовать в State».Я знаю, что ошибка вызвана тем, что тип возвращаемого значения метода State.Однако я не могу изменить его на int, потому что в строке 35 моя переменная состояния имеет тип Class, который будет возвращать ошибку при изменении типа метода binarySearch.

1 Ответ

0 голосов
/ 14 мая 2018

Проблема в том, что у вас есть следующая сигнатура функции:

public State binarySearch(String key)

Это говорит о том, что вы должны вернуть объект типа State, но вы возвращаете значения типа int с return midpoint; и вернуть -1; `.Самое простое решение - изменить подпись на

public int binarySearch(String key)

. Другое решение - оставить подпись метода такой, какая она есть, и вернуть объект State с указанным индексом.Вместо

return midpoint;

до

return states.get(midpoint);

И вместо

return -1;

до

return null;

Пока можно вернуть-1 или State, как предлагают комментарии для binarySearch(), это не очень хорошая идея, потому что они имеют два разных типа.

...