当前位置:编程学习 > JAVA >>

一段小代码报错,我找不到原因

如下,红色段是后面加入的,刚开始时运行正确,然后加入红色段后就报错了
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;
}
}

报错如下

--------------------编程问答-------------------- 图片挂了 --------------------编程问答-------------------- 你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;
    }
}
--------------------编程问答-------------------- for循环里这么写有问题
dogs[i]=new Dog();
你必须先new Test的对象 
dogs[i]=new Test().new Dog(); --------------------编程问答--------------------
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;
}
}
}
--------------------编程问答--------------------
引用 2 楼  的回复:
你Dog类的存放位置有问题,你之前的方式相当于内部类,放在外面就行了
还有注意Java类的命名规范,首字母大写

Java code


import java.io.*;

public class ArrObject {
    public static void main(String[] args) throws Exception{
//定义一个可以存放四只狗的对象……

谢谢 --------------------编程问答--------------------
引用 4 楼  的回复:
Java code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class Test {
    pub……

谢谢 --------------------编程问答--------------------
引用 6 楼  的回复:
引用 4 楼  的回复:
Java code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class ……

结贴吧。 --------------------编程问答-------------------- dogs可能没有那么多 造成索引超界 --------------------编程问答-------------------- dog是一个内部类,不能直接引用的你得new一个Test之后调用它本身的dog --------------------编程问答-------------------- 可以吧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;
}
}
}
--------------------编程问答--------------------
 // 定义一个狗类
    static class Dog {


上面的编辑有问题,只要在class Dog 前加上static修饰就可以了。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,