2014-03-20 2 views
1

В основном я разрабатываю программу, которая включает в себя матрицы, я ЗНАЛ И НЕ ИСПРАВЛЯЮ, что предоставленная матрица может быть простым массивом, но это опровергает то, что я собираюсь здесь.Сравнение строки для целого, не работает?

В любом случае приведенный ниже код предоставляет 3 метода, каждый из которых имеет код, который я пытался сравнить с двумя значениями, и в каждом случае он терпит неудачу. Если кто-нибудь может указать на ошибку, это было бы здорово.

общественного класса TestingLength {

public static String[][] locatedNum = {{"1","2","3"}}; 

public static int num = 3; 

public static void test() { 

    System.out.println("Finding Number " + locatedNum[0][2] + " With Number " + num); 

    if(locatedNum[0][2] == ""+num) { 

     System.out.println("Example Worked!"); 

     return; 
    }else 
     System.out.println("Example Failed!"); 
} 

public static void test2() { 

    System.out.println("Finding Number " + locatedNum[0][2] + " With Number " + num); 

    if(locatedNum[0][2].equals(num)) { 

     System.out.println("Example Worked!"); 

     return; 
    }else 
     System.out.println("Example Failed!"); 

} 

public static void test3() { 

    String s = Integer.toString(num); 

    System.out.println("Finding Number " + locatedNum[0][2] + " With Number " + num); 

    if(locatedNum[0][2] == s) { 

     System.out.println("Example Worked!"); 

     return; 
    }else 
     System.out.println("Example Failed!"); 

} 

public static void main(String[] args) { 
    test(); 
    test2(); 
    test3(); 
} 

}

ответ

2

Ваш первый пример работает, если вы измените

if(locatedNum[0][2] == ""+num) { 

в

if(locatedNum[0][2].equals(""+num)) { 

Здесь вы сравниваете String s, и String s всегда следует сравнивать с помощью .equals. В противном случае вы сравниваете StringУказатели, которые в большинстве случаев не то же самое.

Ваш второй тест работает, если вы измените

if(locatedNum[0][2].equals(num)) { 

в

if(Integer.parseInt(locatedNum[0][2]) == num) { 

В этом случае, вы сравниваете значений Integer и == является правильным выбором. Однако вам необходимо преобразовать значение String с locatedNum в значение Integer.

Ваш третий тест работает, если вы измените

в

if(locatedNum[0][2].equals(s) { 

Если сравнивать строки, всегда используйте .equals вместо ==.

+0

Спасибо, что вы сработали, я действительно рассмеялся из-за того, насколько я был близок и был удивлен, увидев, что вы не можете делать .equals, а затем целое число, но w/e. Еще раз спасибо. – Abszol

0

Ваш первый пример использует == для сравнения двух строк, которые не являются тем же объектом. (== говорит: «Вы один и тот же объект.) Это будет отлично работать с .equals.

Ваш второй незнакомец, сравнивая String непосредственно с int без« + num conversion, которое вы использовали ранее, чтобы преобразовать в Строка

Ваш третий имеет те же проблемы ==.

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