2016-12-16 4 views
-2

Для этой программы я изо всех сил пытаюсь создать цикл for внутри метода return ("notString"). Я пытаюсь заставить программу запрашивать имя шесть раз; однако, я получаю сообщение об ошибке, которое говорит мне добавить возвращаемое значение, которое находится внутри цикла for.Как использовать цикл for внутри метода возврата?

Это утверждение, из которого я должен создать программу: с учетом строки верните новую строку, в которой «нет» было добавлено в начало. Однако, если строка уже начинается с «not», верните строку без изменений.

import java.util.*; 
public class practice1 { 
public static void main(String[] args) { 
    Scanner sc=new Scanner(System.in); 
    String answer= notString(sc); 
    System.out.println(answer); 

} 
public static String notString(Scanner sc){ 
    for(int i=0; i<=6;i++){ 
     System.out.println("Input Name: "); 
     String name= sc.nextLine(); 
     if(name.startsWith("not")){ 
      return name; 
     }else 
      return "not"+name ; 
     } 
    } 

} 
+0

Если вы посмотрите на свой код, вы увидите, что он безоговорочно возвращается в цикл for - в чем суть петли? –

+0

Вы хотите на самом деле _record_ шесть имен, или вы планируете разрешить до шести попыток для определенного ввода? –

+0

Я планировал взять несколько входов со сканера. –

ответ

0

Есть два аспекта этого вопроса.

Первый аспект заключается в том, что компилятор Java сообщает вам, что он «думает» о том, что существуют способы для завершения вашего метода без явного возврата.

В действительности, это не так. Можно доказать, что нет никакого способа, чтобы код после цикла (как написано) мог быть достигнут.

Однако, в соответствии с JLS кодом достижимости правила, которые компилятор, необходимые для реализации, можно достичь конца метода. Поэтому должен быть a return заявление после цикла.

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

То, что он на самом деле будет делать, это «сдаться» после запроса только один раз. В заявлении return говорится «return NOW». И где вы разместили операторы return, вы возвращаетесь «СЕЙЧАС», если что-то true или если оно false; то есть всегда.

Если вы хотите задать шесть раз, то либо:

  • не возвращается с середины цикла, или
  • движения петли к основной методе.

Я не могу сказать, какой из них является правильным подходом, потому что ваше объяснение того, что ваша программа предполагается/требуется сделать, является неполной.

0

Да, у вас должен быть оператор return для метода notString(), который обещает вернуть String в сигнатуру метода. Следующая программа будет скомпилировать и запустить (хотя я не уверен, если это будет ваш окончательный вариант программы):

Модифицированная программа:

import java.util.*; 

public class Practice1 { 
    public static void main(String[] args) { 
     Scanner sc=new Scanner(System.in); 
     String answer= notString(sc); 
     System.out.println(answer); 

    } 
    public static String notString(Scanner sc) { 
     String answer = ""; 
     for(int i=0; i<=6; i++){ 
      System.out.println("Input Name: "); 
      String name= sc.nextLine(); 
      if(name.startsWith("not")){ 
       return name; 
      } else { 
       return "not" + name; 
      } 

     } 
     return answer; // Problem 2: missed a return statement 
    }     // Problem 1: missed a closing brace 
} 
0

Программа является неправильной как в синтаксисе, так и в конструкции. В этом случае нет смысла иметь метод и передавать объект сканера. Если вы просто хотите напечатать 6 входов, когда они придут, сделайте это.

import java.util.*; 
public class practice1 { 
    public static void main(String[] args) { 
     Scanner sc=new Scanner(System.in); 
     for(int i=0; i<=6;i++){ 
      String temp = sc.nextLine(); 
      String answer = temp.startsWith("not")?temp : "not" + temp; 
      System.out.println(answer); 
     } 
     scanner.close(); 
    } 
} 

Если вы хотите сохранить их в массиве и распечатать их позже сразу, сделайте это.

import java.util.*; 
public class practice1 { 
    public static void main(String[] args) { 
     String[] names = new String[6]; 
     Scanner sc=new Scanner(System.in); 
     for(int i=0; i<=6;i++){ 
      String temp = sc.nextLine(); 
      String answer = temp.startsWith("not")?temp : "not" + temp; 
      names[i] = answer; 
     } 
     scanner.close(); 

     for(String name : names){ 
      System.out.println(name); 
     } 

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