2015-01-21 5 views
0
import java.util.Scanner; 

public class ProgrammaD{ 
    public static void main(String[] args){ 
     Scanner keyboard= new Scanner(System.in); 
     String sequence = args[0]; 
     char chars[] = new char[sequence.length()]; 

     for(int i = 0; i < sequence.length(); i++){ 
      chars[i] = sequence.charAt(i); 
     } 

     System.out.println("Insert a character"); 
     char car = keyboard.next().charAt(0); 
     System.out.println("Insert an integer"); 
     int n = keyboard.nextInt(); 
     System.out.println("Original Array"); 

     for(int z = 0; z < sequence.length(); z++){ 
      System.out.println(chars[z]); 
     } 

     char chars2[] = MetodiD.occorrenzeContenuto(chars, n, car); 
     System.out.println("Edited Array"); 

     for(int k = 0; k < sequence.length(); k++){ 
      System.out.println(chars2[k]); 
     } 

     boolean condition = false; 
     char chars3[] = MetodiD.uniformaContenuto(chars, chars2); 

     for(int x = 0; x < sequence.length(); x++){ 
      if(chars[x] == chars2[x]){ 
       condition = false; 
      } 
      else{ 
       condition = true; 
      } 
     } 

     if(condition){ 
      for(int y = 0; y < sequence.length(); y++){ 
       System.out.println(chars3[y]); 
      } 
     } 
    } 
} 

Я не могу выполнить последнюю, если инструкция, и я не могу понять, почему. Может ли кто-нибудь помочь мне понять это? Я хочу, чтобы программа печатала массив, возвращенный в MetodiD.uniformaContenuto(), но я ничего не могу получить от этого кода.Не могу ввести в это оператор if-else

Вот другой класс:

public class MetodiD{ 
    public static char[] occorrenzeContenuto(char par[], int a, char b){ 
     int contatore = 0; 
      for(int i = 0; i < par.length; i++){ 
       if(par[i] != b){ 
        contatore++; 
       }else{ 
       } 
      } 
      if(contatore > a){ 
       for(int k = 0; k < par.length; k++){ 
        if(par[k] != b){ 
         par[k] = determinaCarattere(a, b); 
        }else{ 
       } 
      } 
      }else{ 
      } 
     return par; 
    } 

    public static char determinaCarattere(int n, char b){ 
     int modificato; 
      if(n%2==0){ 
       modificato = (int)b - n; 
      }else{ 
       modificato = (int) b + n; 
      } 
     char modificato2 = (char)modificato; 
     return modificato2; 
    } 

    public static char[] uniformaContenuto(char par1[], char par2[]){ 
     char rit[] = new char[par1.length]; 
      for(int y = 0; y < par1.length; y++){ 
       if(par1[y]<par2[y]){ 
        rit[y] = par1[y]; 
       }else{ 
        rit[y] = par2[y]; 
       } 
      } 
     return rit; 
    } 
} 
+0

операторы печати является всегда полезно (если у вас нет отладчика) –

+0

Что делают ваши методы? Я склонен думать, что ваше «условие» boolean всегда возвращает false –

+1

Вы назначаете 'условие' в цикле' for', только последнее влияет на значение 'condition', проверьте его! – BornToCode

ответ

0

символы создается внутри occorrenzeContenuto, а затем вернулся и назначен chars2, поэтому они всегда будут равны. Попробуйте поменять его для этой версии, где я создал новый массив и скопировал параметр par в него в начале, а затем использовал его для возвращаемого значения.

public static char[] occorrenzeContenuto(char par[], int a, char b){ 
char[] retVal = new char[par.length]; 
System.arraycopy(par,0,retVal,0,par.length); 
int contatore = 0; 
for(int i = 0; i < par.length; i++){ 
    if(par[i] != b){ 
    contatore++; 
    }else{ 
    } 
} 
if(contatore > a){ 
    for(int k = 0; k < par.length; k++){ 
    if(par[k] != b){ 
     retVal[k] = determinaCarattere(a, b); 
    }else{ 
    } 
    } 
}else{ 
} 
return retVal; 
} 

Причина проблема заключается в том, что аргументы массива сохранить ссылку на исходный экземпляр, как объекты делают, а не как отдельный примитив, как полукокс ведет себя, как описано здесь: Java pass by reference