2016-02-26 2 views
1

В следующей программе пользователь должен ввести String (имя города), и программа должна вернуть индекс соответствующего города в массиве.подпрограмма, принимающая массив как параметр в Java

Но я получаю сообщение об ошибке, в подпрограмме indexCities следующее сообщение:

«nameCity не может быть решен».

Я думаю, что это проблема с переменным охватом, но я не понимаю, как я должен это делать. Спасибо за помощь.

import java.util.Scanner; 

public class villes { 

    public static void main(String[] args) { 
     String cities[] = {"Vierzon","Salbris","Nouans","LB","LFSA","Orleans"}; 
     Scanner input = new Scanner(System.in); 
     String nameCity = input.nextLine(); 
     indexCities(cities); 
    } 

    public static int indexCities(String cities[]) { 
     for (int i = 0; i < cities.length; i++) { 
      if(nameCity.equals(cities[i])) { 
       System.out.println(i); 
       break; 
      } 
     } 
    } 

} 
+0

'nameCity' является _local_ переменной в методе' основной() 'и, таким образом, не виден в методе' indexCities() '- Я предлагаю вам читать в переменных областях. чтобы исправить это, либо передайте 'nameCity' в качестве второго параметра, либо поместите сканер в' indexCities() ', в зависимости от ваших потребностей. – Thomas

+0

похоже, что вы забыли оператор 'return' в' indexCities() '. Из-за этого компилятор может получить bitchy ... –

ответ

3

nameCity - это локальная переменная внутри вашего основного метода. Вы не можете получить доступ к нему вне метода. Один из вариантов для вас - передать имяCity также в качестве аргумента в методе indexCities. Также возвращаемый тип вашего метода indexCities должен быть недействительным, поскольку вы ничего не возвращаете.

public static void main(String[] args) { 

    String cities[] = {"Vierzon","Salbris","Nouans","LB","LFSA","Orleans"}; 

    Scanner input = new Scanner(System.in); 

    String nameCity = input.nextLine(); 

    indexCities(cities, nameCity); 

} 

public static void indexCities(String cities[], String nameCity){ 

    for (int i = 0; i < cities.length; i++) { 
     if(nameCity.equals(cities[i])) { 
      System.out.println(i); 
      break; 
     } 
    } 
} 
+0

Спасибо за ваши ответы. Я думал, что каждая переменная, объявленная в основном, доступна для других методов. Я не знаю! – loukios

+0

Нет проблем, мы все здесь учащиеся, мы узнаем что-то новое каждый день. – Anil

0

Вы можете сделать это следующим образом:

public static void main(String[] args) { 
    String cities[] = { "Vierzon", "Salbris", "Nouans", "LB", "LFSA", "Orleans" }; 
    int index = indexCities(cities, "Vierzon"); 
    System.out.println("Index of city Vierzon is: " + index); 
} 

public static int indexCities(String cities[], String cityName) { 
    List<String> cityList = Arrays.asList(cities); 
    return cityList.indexOf(name); 
} 
0

Объем переменной nameCity ограничивается основной функцией. Вы не можете получить доступ к нему за пределами основной функции.

0

Эта переменная выходит за рамки, когда вы пытаетесь использовать ее внутри метода indexCities. Одно из решений делает переменную nameCity переменной экземпляра, переместив ее определение из основного метода, но ваш код можно улучшить несколькими способами. Проверьте некоторые опции ниже:

это напечатает индекс города, который вы ищете внутри массива:

import java.util.Scanner; 

public class villes { 

    public static void main(String[] args) {  
    String cities[] = {"Vierzon","Salbris","Nouans","LB","LFSA","Orleans"}; 
    Scanner input = new Scanner(System.in); 
    String nameCity = input.nextLine(); 
    indexCities(nameCity, cities); 
    } 

    public static void indexCities(String copyOfNameCity, String cities[]){ 
    for (int i = 0; i < cities.length; i++) { 
     if(copyOfNameCity.equals(cities[i])) { 
     System.out.println(i); 
     break; 
     } 
    } 
    } 
} 

Вы можете улучшить его, сделав метод возвращает значение. Как это:

import java.util.Scanner; 

public class villes { 

    public static void main(String[] args) {  
    String cities[] = {"Vierzon","Salbris","Nouans","LB","LFSA","Orleans"}; 
    Scanner input = new Scanner(System.in); 
    String nameCity = input.nextLine(); 
    int cityIndex = indexCities(nameCity, cities); 
     System.out.println(cityIndex == -1 ? "City not found" : "City found in index " + cityIndex);  
    } 

    public static int indexCities(String nameCity, String cities[]){ 
    for (int i = 0; i < cities.length; i++) { 
     if(nameCity.equals(cities[i])) { 
     return i; 
     } 
    } 
    return -1; 
    } 
} 

Другой способ:

import java.util.Arrays; 
import java.util.List; 
import java.util.Scanner; 

public class test2 { 

    public static void main(String[] args) { 
     String cities[] = {"Vierzon", "Salbris", "Nouans", "LB", "LFSA", "Orleans"}; 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the name of city to be searched -> "); 
     String nameCity = input.nextLine(); 
     int cityIndex = indexCities(nameCity, cities); 
     System.out.println(cityIndex == -1 ? "City not found" : "Found at position " + cityIndex); 
     input.close(); 
    } 

    public static int indexCities(String cityName, String cities[]) { 
     List<String> cityList = Arrays.asList(cities); 
     return cityList.indexOf(cityName); 
    } 
} 
Смежные вопросы