如下,红色段是后面加入的,刚开始时运行正确,然后加入红色段后就报错了
package xiao.java5;
import java.io.*;
public class arrObject {
public static void main(String[] args) throws Exception{
//定义一个可以存放四只狗的对象数组
Dog dogs[]=new Dog[4];

//给狗组中的元素赋值
//dogs[0]=new Dog();
//dogs[0].setName("001");
//dogs[0].setWeight(5);

//从控制台输入各狗信息
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
for(int i=0;i<4;i++)

dogs[i]=new Dog();
System.out.println("请输入第"+(i+1)+"只狗名");
//从控制台读取狗名
String name=br.readLine();
//将名字赋给对象
dogs[i].setName(name);
System.out.println("请输入体重");
String wweight=br.readLine();
//把String->float
float weight=Float.parseFloat(wweight);
//将体重赋给对象
dogs[i].setWeight(weight);
}
//总体重
float BigDog=0;
for(int i=0;i<4;i++)
{
BigDog+=dogs[i].getWeight();
}
//计算平均体重
float avgWeight=BigDog/4;
System.out.println("平均体重是"+avgWeight+"kg");

//找出体重最大狗
//假设第一只体重最大
float maxWeight=dogs[0].getWeight();
    int maxIndex=0;
    //按顺序和后面的狗比较
    for(int i=1;i<4;i++)
    
    {
     if(maxWeight<dogs[i].getWeight())
     {
     //修改
     maxWeight=dogs[i].getWeight();
     maxIndex=i;
    
     }
    }
    System.out.println("体重最大的是第"+(maxIndex+1)+"只狗"+
     "体重是"+dogs[maxIndex].getWeight());

}//定义一个狗类
class Dog
{
private String name;
private float weight;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}报错如下

解决方案 »

  1.   

    你Dog类的存放位置有问题,你之前的方式相当于内部类,放在外面就行了
    还有注意Java类的命名规范,首字母大写import java.io.*;public class ArrObject {
        public static void main(String[] args) throws Exception{
    //定义一个可以存放四只狗的对象数组
            Dog dogs[]=new Dog[4];//给狗组中的元素赋值
    //dogs[0]=new Dog();
    //dogs[0].setName("001");
    //dogs[0].setWeight(5);//从控制台输入各狗信息
            InputStreamReader isr=new InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            for(int i=0;i<4;i++)
            {
                dogs[i]=new Dog();
                System.out.println("请输入第"+(i+1)+"只狗名");
    //从控制台读取狗名
                String name=br.readLine();
    //将名字赋给对象
                dogs[i].setName(name);
                System.out.println("请输入体重");
                String wweight=br.readLine();
    //把String->float
                float weight=Float.parseFloat(wweight);
    //将体重赋给对象
                dogs[i].setWeight(weight);
            }
    //总体重
            float BigDog=0;
            for(int i=0;i<4;i++)
            {
                BigDog+=dogs[i].getWeight();
            }
    //计算平均体重
            float avgWeight=BigDog/4;
            System.out.println("平均体重是"+avgWeight+"kg");//找出体重最大狗
    //假设第一只体重最大
            float maxWeight=dogs[0].getWeight();
            int maxIndex=0;
            //按顺序和后面的狗比较
            for(int i=1;i<4;i++)        {
                if(maxWeight<dogs[i].getWeight())
                {
                    //修改
                    maxWeight=dogs[i].getWeight();
                    maxIndex=i;            }
            }
            System.out.println("体重最大的是第"+(maxIndex+1)+"只狗"+
                    "体重是"+dogs[maxIndex].getWeight());
        }    //定义一个狗类}class Dog{
        private String name;
        private float weight;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public float getWeight() {
            return weight;
        }
        public void setWeight(float weight) {
            this.weight = weight;
        }
    }
      

  2.   

    for循环里这么写有问题
    dogs[i]=new Dog();
    你必须先new Test的对象 
    dogs[i]=new Test().new Dog();
      

  3.   

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    public class Test {
    public static void main(String[] args) throws Exception{
    //定义一个可以存放四只狗的对象数组
    Dog[] dogs=new Dog[4];
    //给狗组中的元素赋值
    //dogs[0]=new Dog();
    //dogs[0].setName("001");
    //dogs[0].setWeight(5); //从控制台输入各狗信息
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    for(int i=0;i<4;i++)

    dogs[i]=new Test().new Dog();
    System.out.println("请输入第"+(i+1)+"只狗名");
    //从控制台读取狗名
    String name=br.readLine();
    //将名字赋给对象
    dogs[i].setName(name);
    System.out.println("请输入体重");
    String wweight=br.readLine();
    //把String->float
    float weight=Float.parseFloat(wweight);
    //将体重赋给对象
    dogs[i].setWeight(weight);
    }
    //总体重
    float BigDog=0;
    for(int i=0;i<4;i++)
    {
    BigDog+=dogs[i].getWeight();
    }
    //计算平均体重
    float avgWeight=BigDog/4;
    System.out.println("平均体重是"+avgWeight+"kg"); //找出体重最大狗
    //假设第一只体重最大
    float maxWeight=dogs[0].getWeight();
      int maxIndex=0;
      //按顺序和后面的狗比较
      for(int i=1;i<4;i++)
     
      {
      if(maxWeight<dogs[i].getWeight())
      {
      //修改
      maxWeight=dogs[i].getWeight();
      maxIndex=i;
     
      }
      }
      System.out.println("体重最大的是第"+(maxIndex+1)+"只狗"+
      "体重是"+dogs[maxIndex].getWeight());
    } //定义一个狗类
    class Dog
    {
    private String name;
    private float weight;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public float getWeight() {
    return weight;
    }
    public void setWeight(float weight) {
    this.weight = weight;
    }
    }
    }
      

  4.   

    dogs可能没有那么多 造成索引超界
      

  5.   

    dog是一个内部类,不能直接引用的你得new一个Test之后调用它本身的dog
      

  6.   

    可以吧dog类改成静态内部类就可以了,上面的方法也可以。
    package com.cd.apps;import java.io.*;public class Tst2 {
    public static void main(String[] args) throws Exception {
    // 定义一个可以存放四只狗的对象数组
    Dog dogs[] = new Dog[4]; // 给狗组中的元素赋值
    // dogs[0]=new Dog();
    // dogs[0].setName("001");
    // dogs[0].setWeight(5); // 从控制台输入各狗信息
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    for (int i = 0; i < 4; i++) {
    dogs[i] = new Dog();
    System.out.println("请输入第" + (i + 1) + "只狗名");
    // 从控制台读取狗名
    String name = br.readLine();
    // 将名字赋给对象
    dogs[i].setName(name);
    System.out.println("请输入体重");
    String wweight = br.readLine();
    // 把String->float
    float weight = Float.parseFloat(wweight);
    // 将体重赋给对象
    dogs[i].setWeight(weight);
    }
    // 总体重
    float BigDog = 0;
    for (int i = 0; i < 4; i++) {
    BigDog += dogs[i].getWeight();
    }
    // 计算平均体重
    float avgWeight = BigDog / 4;
    System.out.println("平均体重是" + avgWeight + "kg"); // 找出体重最大狗
    // 假设第一只体重最大
    float maxWeight = dogs[0].getWeight();
    int maxIndex = 0;
    // 按顺序和后面的狗比较
    for (int i = 1; i < 4; i++) {
    if (maxWeight < dogs[i].getWeight()) {
    // 修改
    maxWeight = dogs[i].getWeight();
    maxIndex = i; }
    }
    System.out.println("体重最大的是第" + (maxIndex + 1) + "只狗" + "体重是"
    + dogs[maxIndex].getWeight());
    } // 定义一个狗类
    static class Dog {
    private String name;
    private float weight; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public float getWeight() {
    return weight;
    } public void setWeight(float weight) {
    this.weight = weight;
    }
    }
    }
      

  7.   

     // 定义一个狗类
        static class Dog {上面的编辑有问题,只要在class Dog 前加上static修饰就可以了。