zsqangle
2016-03-13 17:22
import java.util.Arrays;
public class HelloWorld {
//完成 main 方法
public static void main(String[] args) {
int[]scores={89 , -23 , 64 , 91 , 119 , 52 , 73};
HelloWorld hello=new HelloWorld();
hello.topThree(scores);
}
//定义方法完成成绩排序并输出前三名的功能
public void topThree(int[] scores){
Arrays.sort(scores);
for(int i=scores.length-1;i>=0;i--){
if(scores[i]>=0 && scores[i]<=100){System.out.println("考试成绩的前三名为:");
System.out.println(scores[i-1]);
System.out.println(scores[i-2]);
System.out.println(scores[i-3]);
}
}
}
将负数和过一百的抛出 就是-23和119
用if语句 抛出是continue
抛出后所有的都留下 你使用的是大于0&&小于100
这样对后面的施行方法无法进行具体编程
合适的进行输出 不合适的没写怎么进行处理
而如果用抛出 不合适的抛出了 合适的下面接着处理
抛出语句是
if(scores[i]<0 || scores>100){
continue
}
for(int i=scores.length-1;i>=scores.length-2;i--){
if(scores[i]>=0 && scores[i]<=100){
System.out.println("考试成绩的前三名为:");
System.out.println(scores[i-1]);
System.out.println(scores[i-2]);
System.out.println(scores[i-3]);
你这样不对 你应该
private void score(int[] scores) { //定义方法
Arrays.sort(scores); //遍历数组 这俩你也写了
int num=0; //定义名次 初始化为0
for(int i=scores.length-1;i>0;i--){ //定义i 对数组倒叙开始
if (scores[i]<0 || scores[i]>100){ //前面说的抛出不正常数字
continue;
}
num++; //i 减个1 num减个1 当i 进行三个时 num为3 前三名就确定了
if (num>3) { //当num大于3后 不在进行 断开方法为break
break;
}
System.out.println(scores[i]); //i 进行了3位 输出数组
}
思路:题意输出前三名,当出现数字时绝对会有相对应的常量 咱们设置的是num
在对正确数字进行选择时要先将异常数字抛出 就是前面说的continue
遍历数组你知道了,也知道从后向前取值,所以取值就从数组最后一位length-1开始一直到0
不能自己中断要一直到0,要靠条件自动停止,条件就是num>3, 当大于3时取值结束
方法返回值为scores[i],再在前面调用,这个你没写错 就不说了
最后改成了这样,OK了。谢谢nosilence和各位的回答!
import java.util.Arrays;
public class HelloWorld {
//完成 main 方法
public static void main(String[] args) {
int[]scores={89 , -23 , 64 , 91 , 119 , 52 , 73};
System.out.println("考试成绩的前三名为:");
HelloWorld hello=new HelloWorld();
hello.topThree(scores);
}
//定义方法完成成绩排序并输出前三名的功能
public void topThree(int[] scores){
Arrays.sort(scores);
int jj=0;
for(int i=scores.length-1;i>=0;i--){
if(scores[i]>=0 && scores[i]<=100){
System.out.println(scores[i]);
int countt=++jj;
if(countt>2){
break;
}
}
}
}
}
你这样写肯定不行的。
sort排序后是升序,即从大到小,为了输出成绩最高的前三个,理论上是要输出后面的三个,又因为数据里面有无效的数据(比如小于0;大于100),因此倒叙取后面的数据的时候,要检验成绩是否0>=0 && <=100,符合条件的输出,并用一个int计数器来存储已经输出了的有效成绩个数,每次输出就++,满3个了就break出循环,结束。
从length-1到0 为for(int i=length-1;i>0:i--)
i要大于0 不能大于等于 这样当i为0时还会减1
有相应的变量 num是变量
额,还要改
System.out.println(scores[i]);
System.out.println(scores[i-1]);
System.out.println(scores[i-2]);
import java.util.Arrays;
public class HelloWorld {
//完成 main 方法
public static void main(String[] args) {
int[]scores={89 , -23 , 64 , 91 , 119 , 52 , 73};
HelloWorld hello=new HelloWorld();
hello.topThree(scores);
}
//定义方法完成成绩排序并输出前三名的功能
public void topThree(int[] scores){
Arrays.sort(scores);
/*只是将你的for终止条件改变,你的循环只需要运行两次就得出结果了,但不具有普适性,如果前两个都大于100就不行了。
http://www.imooc.com/qadetail/124709 看下我的,还有标准答案 */
for(int i=scores.length-1;i>=scores.length-2;i--){
if(scores[i]>=0 && scores[i]<=100){
System.out.println("考试成绩的前三名为:");
System.out.println(scores[i-1]);
System.out.println(scores[i-2]);
System.out.println(scores[i-3]);
}
}
}
}
既然是for循环。何必要scores[i-1],scores[i-2],scores[3]呢,直接scores[i]就可以了。
Java入门第一季(IDEA工具)升级版
1165172 学习 · 17581 问题
相似问题