冲突b / w字符串和字符串[]

时间:2011-03-09 10:37:12

标签: java arrays string variables

基本上我有一个类,它有使用String数组的方法,我在应用程序类中编写一个方法来读取文件并更新Customer类的对象数组。我得到的错误如下:

第83行:Customer中的set_address(java.lang.String [])无法应用于(java.lang.String) 在行审查[i] .set_address(st [1])。我知道它正在寻找一个字符串[]并且它正在接收一个字符串,但是有什么方法可以解决这个问题吗?这是我正在使用的代码。

    import java.io.*;
import java.util.*;

class Customer {

int account_id;
char[] ch1 = new char[20];
String name = new String (ch1);
char[] ch2 = new char[80];
String address = new String (ch2);
char[] ch3 = new char[10];
String phone_number = new String (ch3);
char[] ch4 = new char[8];
String date_of_birth = new String (ch4);
double account_balance;

public int get_accountid(){
       return account_id;
}

public String get_address(){
       return address;
}

public String get_phone_number(){
       return phone_number;
}

public String get_date_of_birth(){
       return date_of_birth;
}

public double get_balance(){
       return account_balance;
}

public void set_account_id(int num){
       account_id = num;
}

public void set_address(String add){
       address = add;
}

public void set_phone_number(String phone){
       phone_number = phone;
}

public void set_date_of_birth(String dob){
       date_of_birth = dob;
}

public void set_balance(double bal){
       account_balance = bal;
}
Customer(){ // default constructor
}

// parametrized constructor
Customer(int id, String name, String add, String dob, String num, double bal){
    this.account_id = id;
    this.name = name;
    this.address = add;
    this.date_of_birth = dob;
    this.phone_number = num;
    this.account_balance = bal;
}

}


     public class lab2{
     public static void main(String args[]){

     System.out.println("testing this shit");    
      }
      public static void readFile(String filename){
          Customer[] review = new Customer[30];
          int i=0; 
          Scanner scan = new Scanner (new File (filename));
          while (scan.hasNext()){

               while(i<30){

                      review[i].set_account_id(scan.nextInt());
                  String[] st = scan.nextLine().split("=");
                  review[i].set_address(st[1]);
                  st = scan.nextLine().spilt("=");
                      review[i].set_phone_number(st[1]);
                      st = scan.nextLine().split("=");
                      review[i].set_date_of_birth(st[1]);
                      //st = scan.nextLine().split("=");
                      review[i].set_balance(scan.nextDouble());
                      scan.nextLine();
                      i=i+1;
             }
        }
     }

   }

2 个答案:

答案 0 :(得分:3)

您的班级Customer看起来像一个Java bean。我发现这些声明可疑:

String[] name = new String [20];
String[] address = new String [80];
String[] phone_number = new String [10];
String[] date_of_birth = new String [8];

为什么您希望Customer有20个姓名,80个地址,10个电话号码和8个出生日期?我怀疑你的意图是说Customer名称长度最多为20个字符,他/她的地址长度最多为80个字符,等等。如果是这样,那么你不想要String[]。 1}},你可能想要一个char []!

但是,考虑简单地String制作这些字段:这似乎更自然。我不明白你为什么要限制它们的大小。

答案 1 :(得分:1)

只需更改您的方法签名:

public void set_address(String add){
       address = add;
}

或其他选择:您可以根据String对象创建一个新的String []对象,并传递: