2014-02-07 2 views
0

У меня возникают две небольшие непредвиденные ошибки, которые возникают у меня с трудом.Неожиданные ошибки типа

Ошибки возникают при:

swapped.charAt(temp1) = str.charAt(temp2); 
swapped.charAt(temp2) = temp1; 

Любые советы?

public class SwapLetters 
{ 
    public static void main(String[] args) 
    { 

     System.out.println("Enter a string: "); 
     String str = new String(args[0]); 
     String swapped = str; 

     char[] charArray = str.toCharArray(); 

     System.out.println("Enter a position to swap: "); 

     int Swap1 = Integer.parseInt(args[1]); 

     System.out.println("Enter a second position to swap: "); 

     int Swap2 = Integer.parseInt(args[2]); 

     char temp1 = str.charAt(Swap1); 
     char temp2 = str.charAt(Swap2); 

     swapped.charAt(temp1) = str.charAt(temp2); 
     swapped.charAt(temp2) = temp1; 

     System.out.println("Original String = " + str); 
     System.out.println("Swapped String = " + swapped); 
    } 
} 
+0

Каковы ошибки, которые вы получаете –

+0

Вы прочитали, что должен сказать компилятор? –

+0

Хорошее ole lside vs rside – pamphlet

ответ

2

Вы можете присваивать значения переменным, а не другим значениям. Заявления вроде 5 = 2 или 'a' = 'z' не работают на Java, и именно поэтому вы получаете сообщение об ошибке. swapped.charAt(temp1) возвращает значение значение, которое вы пытаетесь переписать, это не ссылка на определенную позицию внутри String или переменную, которую вы можете изменить (также помните, что строки Java неизменяемы, поэтому вы не можете их изменить путь после создания).

Для получения информации об использовании String обратитесь к http://docs.oracle.com/javase/7/docs/api/java/lang/String.html. У этого решения должно быть решение, которое вы пытаетесь сделать.

Ваш код может даже вызывать IndexOutOfBoundsException - если отрицательный аргумент индекса или нет меньше длины этой строки. Проверьте длину каждой строки.

-1

Описание String#charAt(int):

Returns the char value at the specified index

Он возвращает значение характера; присвоения значений этого возвращаемого значения в следующих строках проблема:

swapped.charAt(temp1) = str.charAt(temp2); 
swapped.charAt(temp2) = temp1; 

Кроме того, String#charAt(int) ожидает индекс символа в пределах строки, а не сам символ (т.е. chatAt(temp1) неверно), так что ваш метод не будет работать должным образом, даже если вы устраните прежнюю проблему.

Попробуйте следующее:

String swapped; 
if(swap1 > swap2) { 
    swap1+=swap2; 
    swap2=swap1-swap2; 
    swap1-=swap2; 
} 
if(swap1!=swap2) 
    swapped = str.substring(0,swap1) + str.charAt(swap2) + str.substring(swap1, swap2) + str.charAt(swap1) + str.substring(swap2); 
+0

Они не «ничего не делают», это то, что вызывает ошибку! В индексе нет ничего плохого, кроме возможных ошибок вне пределов. – kviiri

+0

@ kviiri «Ничего не значит» в том смысле, что присвоение значений значениям бессмысленно, а не в том смысле, что результата нет (ошибка). Проблема с индексом не может вызывать исключение, но я указываю, что метод не достигнет желаемого результата, потому что 'charAt' не вернет ожидаемый символ. – asaini007

+0

Рассматриваемая проблема - ошибки, вызванные ошибочным присваиванием, а не индексы, потому что индексы в основном правильны, если они не выходят за пределы. – kviiri

2

Левая сторона вас назначение не может получить это значение.

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