2016-02-26 19 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_變量'的main()',因此是不可見的方法'indexCities()' - 我建議你閱讀變量作用域。要麼修復它,要麼傳入'nameCity'作爲第二個參數,要麼將掃描器放在'indexCities()'裏面,以滿足您的需求。 – Thomas

+0

似乎你已經忘記了'indexCities()'中的'return'語句。編譯器可能因此而變得bit ... ...... –

回答

3

nameCity是您的主要方法中的局部變量。您不能在方法外訪問它。 您的一個選擇是將nameCity也作爲indexCities方法中的參數傳遞。你的indexCities方法的返回類型應該是void,因爲你沒有返回任何東西。

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

感謝您的回答。我認爲在main中聲明的每個變量都可以用於其他方法。我不會知道的! – 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); 
    } 
}