2016-01-14 2 views
-1

Я в настоящее время делает деятельность, которая требует от меня, чтобы написать это:Java Алгоритм относительно принимая массив String, и типа Integer к

Написать определение для статического метода stringHeads, который вводит массив целых чисел р и а Строка s. Для каждого из int n в p метод строит подстроку, состоящую из первых n символов в s (или всего s, если n больше длины s). Метод возвращает массив этих подстрок.

Мой код в настоящее время что-то вроде этого:

public static String[] stringHeads(int[] p, String s) { 
    String[] rad = new String[p.length]; 
    int e = 0; 
    for (int b : p) 
     e = b - 1 
    for (int de = 0; rad.length > de; de++) 
     rad[de] = s.substring(0,e); 
    for (String str : rad) 
     return str; 
} 

//Just ignore the rest 
int[] a = {4, 2, 3, 2, 0 }; 
String b = "Radon" 
stringHeads(a,b) 

Выход должен быть "Rado", "Ра", "Рад", "Ра", "".

Ошибка, которую я сейчас получаю, заключается в том, что String не может быть преобразован в String [].

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

+0

Ваше возвращение тип stringHeads() является String [], но вы возвращаете строку. Вы должны полностью передать массив строк. – Shriram

+2

'return rad' ....... –

+2

заменить' return str; 'с' return rad; '. Удалите последний цикл. –

ответ

1

Вы могли бы упростить вам код, используя только один итерации с альтернативная переменная.

public static void main (String[] args) throws java.lang.Exception 
{ 
    int[] a = {4, 2, 3, 2, 0 }; 
    String b = "Radon"; 
    String[] result = stringHeads(a,b); 
    for(String x : result) System.out.println(x); 
    //Or you can write a separate display method instead. 
} 
public static String[] stringHeads(int[] p, String s) 
{ 

    String[] rad = new String[p.length]; 
    //Use this variable for array allocation/iteration. 
    int i=0; 
    //Simply iterate using this for-each loop. 
    // This takes care of array allocation/ substring creation. 
    for (int x : p) 
     rad[i++] = s.substring(0,x); 
    return rad; 
} 
+0

Спасибо за код, я чувствовал, что ваш был самым легким для меня пониманием, также мне не нужно было переходить по индексу, если x был больше длины s, поэтому я сделал: public static String [] stringHeads (int [] p, String s) { String [] rad = new String [p.length]; int i = 0; для (int x: p) { if (x> s.length()) { rad [i ++] = s; } еще rad [i ++] = s.substring (0, x); } return rad; } – Tran

+0

Да, это будет хорошо, и, пожалуйста, я рад помочь: D –

2

Три вещи:

  • е была бы постоянной, если ввести вторую петлю.
  • e может быть больше, чем s.length() - вы не обрабатывали этот случай.
  • Вы возвращать строку вместо String []

И всегда используйте фигурные скобки, если вы используете петлю, даже если цикл содержит только один оператор. Он гораздо читабельнее и может избежать ошибок.

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

Подсказки: Напишите только одну петлю!

String[] rad = new String[p.length]; 
for (int i=0; i < p.length; i++) { 
    if (s.length() < ??) { 
     rad[i] = s.substring(0,??); 
    } else { 
     ?? 
    } 
} 
return rad; 

Надеюсь, это поможет вам получить ответ самостоятельно.

2

См. Мой код ниже. Надеюсь, что это поможет: -
Я представил комментарии, а не объяснял это в параграфе.
Что касается вашей ошибки, вы возвращаете String из метода, но ожидаемый массив String.

public static void main(String[] args){ 

     int[] a = {4, 2, 3, 2, 0 }; 
     String b = "Radon"; 
     String[] output=stringHeads(a,b); 
     for(String s:output){ 
      System.out.println(s); 
     } 
    } 

Ваш метод может быть, как показано ниже:

public static String[] stringHeads(int[] p, String s) { 
    String[] rad = new String[p.length]; 
    int e = 0; 
    //Iterate over integer array 
    for(int index=0; index<p.length; index++){ 
     //Extracting the integer value from array one by one 
     e=p[index]; 
     //If integer value is greater than String length 
     if(e>s.length()){ 
      //Put the entire String in String array 
      rad[index]=s; 
     }else{ 
      //Put the Substring value with range 0 to e i.e. integer value 
      rad[index]=s.substring(0,e); 
     } 
    } 
    return rad; 
    } 
+0

Хорошо, это была бы целая функция, точно так же, как я ее записывал раньше. 'index

+0

Вы правы, отредактированы. –

0

Там нет необходимости для цикла, который перебирает массив целых чисел р

public static String[] stringHeads(int[] p, String s) { 
    String[] rad = new String[p.length]; 
    for (int de = 0; de < p.length; de++){ 
     if (p[de] < s.length()) 
      rad[de] = s.substring(0,p[de]); 
     else 
      rad[de]=s; 
    } 
    return rad; 
} 
+0

Ваш ответ игнорирует, что 'p [de]' может быть больше, чем 's.length()'. –

+0

Зачем оставлять 'int e', если он больше не используется? Не говоря уже о том, что он почти идентичен ответу JornBuitink (кроме того, что позволяет OP самостоятельно разрабатывать несколько частей) –

+0

int e была ошибкой, которую я упустил, ... Отредактировал ее, прежде чем вы разместили этот комментарий ... Я думаю, вы не обновили ответ –

0

Пожалуйста, проверьте код ниже

public static String [] stringHeads (int [] intArray, String str) {

String[] result = new String[intArray.length]; 
      int count=0; 
    for (int intValue : intArray) 

     {  

     result[count] = str.substring(0,intValue); 
     count++; 
     } 
    return result; 
    } //Just ignore the rest 

    public static void main(String[] args) { 
     int[] a = {4, 2, 3, 2, 0 }; 
     String b = "Radon"; 
     String[] strArray=stringHeads(a,b); 
     int count=0; 
     for(String str:strArray) 
      System.out.println(++count+"" +str);   
    } 
+0

Вам стоит подумать об исправлении отступов кода. Первая строка кода была исключена из кода кода –

0

Измените метод как этот

public static String[] stringHeads(int[] p, String s) { 
     String[] rad = new String[p.length]; 
     int e = 0; 
     for (int b : p) { 
      rad[e] = s.substring(0, b); 
      e++; 
     } 


     return rad; 
    } 

Для использования этого метода

public static void main(String[] args) { 

     int[] a = {4, 2, 3, 2, 0}; 
     String b = "Radon"; 
     String[] stringHeads = stringHeads(a, b); 

     for (String stringHead : stringHeads) { 
      System.out.println(stringHead); 
     } 
    } 

Выход

Rado 
Ra 
Rad 
Ra 
+0

В ответе игнорируется, что 'b' может быть больше, чем' s.length() '. –

+0

Хорошо, я отредактирую этот ответ –

0
public static String[] stringHeads(int[] p, String s) { 
     String[] rad = new String[p.length]; 
     int e = 0; 
     for (int b : p) { 
      if(b<=s.length()){ 
      rad[e] = s.substring(0, b); 

      } 
       e++; 
     } 


     return rad; 
    }