2015-08-14 3 views
0

У меня возникли проблемы с некоторым программированием на Java, и я довольно смущен тем, как операнды сравнения работают между входами.Сравнение строки и целого числа (java)

Что я хочу, так это то, что моя программа принимает входные данные, анализирует входные данные, проверяет, на что это равно, и выводит сообщение на основе их ввода. Как мне сравнить вход, с переменной option1, которую я установил?

Вот один файл, называемый loadfile.java

package subsets; 

import java.io.*; 
import java.util.Scanner; 

public class loadfile { 

     public static void main(String args[]) { 

     } 

     public static void choose(String[] args) { 

      // Set an option 
      int option1 = 1; 

      // Start grabbing input 
      System.out.print("Choose one: "); 
      Scanner scanner = new Scanner(System.in); 
      String input = scanner.nextLine(); 

      // Parse input into an integer (expecting int) 
      int selection = Integer.parseInt(input); 

      // If input == option1, let's go with this code. 
      if(input.equals(option1)){ 

       System.out.println("You choose option 1."); 

      } 
     } 
} 

У меня есть loadfile.choose(args); в другой файл, и этот файл обрабатывает остальные файлы я буду внедряющих.

Вот файл: otherfile.java

package subsets; 

public class otherfile { 

     public static void main(String args[]){ 
      System.out.println("Please select an option (using number keys): \n"); 
      System.out.println(
        "1. Option 1 \n" 
        + "2. Option 2 \n" 
        + "3. Option 3 \n" 
        + "4. option 4 \n"); 

      // Start analyzing their choice 
      loadfile.choose(args); 
     } 

} 
+3

Что вы хотите сказать? – CubeJockey

+0

Почему я не могу сравнить вход с переменной параметра, которую я установил? (извините, я имел в виду это). –

+1

Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Sid

ответ

1

Вы можете либо изменить ваш int option1 = 1; к String option1 = "1"; или разобрать ввод данных пользователем в виде целого числа или делать scanner.nextInt() вместо nextLine Есть много вариантов, чтобы исправить это здесь. Integer.parseInt(String).

+0

Спасибо, позвольте мне попробовать несколько. –

+0

Спасибо, @ brso05, работал как шарм. –

+0

@LoganButler ваш радушный рад, что я мог бы помочь! – brso05

1

equals() действителен только между объектами того же типа.

int даже не объект, но Java преобразует его неявно к Integer объекта, когда он передает его в качестве параметра методу, который ожидает ObjectInteger является Object - все классы расширения Object).

А теперь equals осталось сравнить объект String с объектом Integer. Поскольку они не одного типа, это всегда будет ложным.

Для правильного сопоставления вам необходимо получить целое число из строки синтаксический анализ в int. Например, используя Integer.parseInt().

И ... вы сделали именно это, но вы забыли использовать результат своей операции. У вас есть переменная selection, просто сравните selection вместо input.

Конечно, в этом случае вы просто используете selection == option1 вместо equals, потому что int примитивен и не имеет методов.

0

В целом метод equals делает не Возвращает true при сравнении объектов разных типов. Это реализация String#equals(Object):

public boolean equals(Object anObject) { 
    if (this == anObject) { 
     return true; 
    } 
    if (anObject instanceof String) { 
     String anotherString = (String)anObject; 
     int n = count; 
     if (n == anotherString.count) { 
      char v1[] = value; 
      char v2[] = anotherString.value; 
      int i = offset; 
      int j = anotherString.offset; 
      while (n-- != 0) { 
       if (v1[i++] != v2[j++]) 
       return false; 
      } 
      return true; 
     } 
    } 
    return false; 
} 

Примечание проверка if (anObject instanceof String).

В вашем случае, я не вижу, почему бы не просто делать:

if (selection == option1) { 

, так как вы уже получили переменную selection.

Смежные вопросы