关于JAVA编程的问题。(新手初学,高手勿喷)
1:通过输入7天的天气温度计算平均值。(这样运用数组不对么?教程上写的Scanner sc=new Scanner(System.in); 看不懂,运行也报错,下面是我自己写的)
public class tianqi {
public static void main(String[] args){
int average,i;
int sum=0;
System.out.println("输入7天的温度:");
for(i=0;i<args.length;i++);
sum=sum+args[i];
average=sum/7;
System.out.println("周"+(i+1)+"的温度为"+args[i]);
System.out.println("平均温度为:"+ average);
}
}
报错:
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
类型不匹配:不能从 String 转换为 int
at tianqi.main(tianqi.java:8)
2:计算1+2+3+...n的值(这个是在教材上抄写的,不懂为啥报错,“输入”的语法也看不太懂)
public class xunhuan {
public static void main(String[] args) {
int sum=0;
System.out.println("计算1+2+..+n的值,请输入n=");
char n=(char)System.in.read(); //这是什么?
char a=n;
for(a;a>0;a--)
sum+=a;
System.out.println("从1加到"+n+"的和值为"+sum);
}
}
报错:
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
语法错误,将“AssignmentOperator 表达式”插入到完整 ForInit 中
at xunhuan.main(xunhuan.java:9)
: 展开
第一题,代码有点问题,arg[i]应该放在for循环中的,后面对arg[i]参数使用Integer.parseInt(String str)方法转换成int类型,Integer类是int的包装类,属于java.lang包,只要是java程序,都可以直接使用这个包,不需要导包。该过之后,我运行了一次,显示是成功的。
public class Test1 {
public static void main(String[] args) {
int average,i;
int sum=0;
System.out.println("输入7天的温度:");
for(i=0;i<args.length;i++)
{
sum=sum+Integer.parseInt(args[i]);
System.out.println("周"+(i+1)+"的温度为"+args[i]);
}
average=sum/7;
System.out.println("平均温度为:"+ average);}
}运行结果:
D:\>javac Test1.java
D:\>java Test1 85 69 12 32 20 12 45
输入7天的温度:
周1的温度为85
周2的温度为69
周3的温度为12
周4的温度为32
周5的温度为20
周6的温度为12
周7的温度为45
平均温度为:39第二题代码也有问题,反正编译之前就提示代码是错的。我也改了一下。n在使用之前必须先初始化,否则编译时编译器会提示出错。还有for循环中for(a;a>0;a--)中的第一句必须是赋值语句,即必须是a=xxx。虽然a是char类型也可以用在for循环中,但是一般建议使用int类型的数据更好。因为char类型的数据也可以等价于int类型的数据的用法,但是因为它们是通过ASCII码来转换的,所以char类型的数据最终解释成int类型时并不一定是你想要的数据。
这里也是使用Integer.parseInt(String str)方法将输入的字符转换成int类型。System.in是程序的输入流,是从控制台上获取数据,传到程序中;另外System.out是程序的输出流,是从程序中获取数据,传到控制台上。System.out.println()方法你用过了,应该能理解的,就是输出输出流里面的数据。
public static void main(String[] args) {
int sum=0;
System.out.println("计算1+2+..+n的值,请输入n=");
char n=' ';
try {
n = (char)System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
int a=Integer.parseInt(n+"");
for(;a>0;a--)
sum+=a;
System.out.println("从1加到"+n+"的和值为"+sum);
}运行结果:
计算1+2+..+n的值,请输入n=
100
从1加到1的和值为1虽然改过之后是可以运行的,不过因为char接受的是单个字符,所以只有1-9的输入是有效的,所以我用另一种方式来获取控制台数据,可以更好的完成功能。使用前导入import java.util.Scanner;使用Scanner类的原因是:
InputStream输入流(即System.in)以字节为单位来获取数据,而且需要复杂的判断并创建字节数组作为缓冲,最主要的是字节转换为字符时容易出现中文乱码的情况,所以对于字符数据的读取,应该使用扫描器进行封装,然后获取字符串类型的数据。
public static void main(String[] args) {
int sum=0;
System.out.println("计算1+2+..+n的值,请输入n=");
Scanner scan=new Scanner(System.in);
String input=scan.nextLine();
int a=Integer.parseInt(input);
for(;a>0;a--)
sum+=a;
System.out.println("从1加到"+input+"的和值为"+sum);
}运行结果:
计算1+2+..+n的值,请输入n=
100
从1加到100的和值为5050
sum=sum+args[i];这句,sum是整型变量,args[]是字符串数组,args[i]是一个字符串。
将不同类型变量相加时,编译器会进行类型转换,而string是无法转换为int的,因此会出现“不能从 String 转换为 int”的错误提示。
应该是这样,但我初学,不知道怎么化解这个问题
第2题中a是char类型的,怎么会在for循环中出现。
第二个问题Scanner sc=new Scanner(System.in);可以直接用int a = sc.readInt();
第一题改后也报错,提示:没有为类型 Integer 定义方法 parse(String)
另外你说的第二题是看错了,那是我第一题。。
不过谢了!
额...不好意思,是parseInt(args[i])
2013-06-22