Java程序设计 # 1

  • 文章如有错误或疏漏之处还请不吝赐教
  • 本文假定读者已经掌握一门编程语言的基础,适宜从未接触编程的同学

hello,world

package chapt1;

public class helloworld {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

hello,applet

package chapt1;

import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class helloapplet extends JApplet{
	public void paint(Graphics g) {
		g.drawString("Hello,world!", 20, 20);
	}
}

hello,IO

package chapt1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class helloinput {
	public static void main(String[] args){
		//现在常用方法 Scanner
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入一个数:");
		int a = scanner.nextInt();
		System.out.printf("%d的平方是%d\n",a,a*a);
		//早期的方法	
		char c = ' ';
		System.out.print("请输入一个字符:");
		try{
			c = (char)System.in.read();
		}catch(IOException e){}
		System.out.println("你输入了:"+c);
	}	
}

hello,GUI

package chapt1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class hellographic {
	public static void main(String[] args) {
		new AppFrame();
	}
}

class AppFrame extends JFrame{
	JTextField in = new JTextField(10);
	JButton btn = new JButton("求平方");
	JLabel out = new JLabel("用于显示结果的标签");
	public AppFrame(){
		setLayout(new FlowLayout());
		getContentPane().add(in);
		getContentPane().add(btn);
		getContentPane().add(out);
		btn.addActionListener(new BtnActionAdapter());
		setSize(400,100);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setVisible(true);
	}
	class BtnActionAdapter implements ActionListener{
		public void actionPerformed(ActionEvent e){
			String s = in.getText();
			double d = Double.parseDouble(s);
			double sq = d*d;
			out.setText(d+"的平方根是:"+sq);
		}	
	}
}

语法细节:

  • char为2个字节,默认为Unicode字符集(一个汉字只需要一个unicode码)
  • boolean型只有true或false,0假非0真在java中适用
  • 标识符可以用$_、字母、数字(但不能数字开头)
  • java中&&||要进行短路计算,&|不短路
  • 移位
  • 高级数据类型转化为低级数据类型必须显式强制转换
  • java中的%运算
System.out.println(100%3);
System.out.println(100%-3);
System.out.println(-100%3);
System.out.println(-100%-3);

output:

1
1
-1
-1

原因:在处理含有负数的情况时,%忽略后者的符号,保留前者的符号。

  • Java中的移位运算
package chapt1;
public class test {
	public static void main(String[] args) {
		int a = 0b1100,b = 0b1010;
		print("a ",a);
		print("b ",b);
		print("a&b ",a&b);
		print("a|b ",a|b);
		print("a^b ",a^b);
		print("~a ",~a);
		print("a<<2 ",a<<2);
		print("a>>2 ",a>>2);
		print("a>>>2 ",a>>>2);
	}
	static void print(String prefix,int n){
		String s = Integer.toBinaryString(n);
		while(s.length()<4)s="0"+s;
		System.out.println(prefix+s);
	}
}

output:

a 1100
b 1010
a&b 1000
a|b 1110
a^b 0110
~a 11111111111111111111111111110011
a<<2 110000
a>>2 0011
a>>>2 0011

流程控制语句examples

  • 闰年判断
package chapt1;
public class test {
	public static void main(String[] args) {
		int year = 2003;
		if((year%4==0&&year%100!=0)||(year%400==0))
			System.out.println("是闰年");
		else System.out.println("不是闰年");
	}
}
  • 成绩分级
public class GradeLevel{
	public static void main( String args[ ] ){
		System.out.println("\n**** first situation ****");
		char grade='C'; 
		switch( grade ){
			case 'A' : 
				System.out.println(grade+" is 85~100");
				break;
			case 'B' : 
				System.out.println(grade+" is 70~84");
				break;
			case 'C' : 
				System.out.println(grade+" is 60~69");
				break;
			case 'D' : 
				System.out.println(grade+" is <60");
				break;
			default : 
				System.out.println("input error");
		}
	}
}
  • 计算题出题
package chapt1;
import java.awt.*;
import javax.swing.*;
public class AutoScore extends JFrame{
	public AutoScore(){
		init();
		setSize( 400,350 );
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible( true );
	}
	public void init(){
		//{{INIT_CONTROLS
		setLayout(null);
		setSize(400,350);
		btnNew.setLabel("出题");
		getContentPane().add(btnNew);
		btnNew.setBackground(java.awt.Color.lightGray);
		btnNew.setBounds(36,96,98,26);
		btnJudge.setLabel("判分");
		getContentPane().add(btnJudge);
		btnJudge.setBackground(java.awt.Color.lightGray);
		btnJudge.setBounds(216,96,94,25);
		lblA.setText("");
		getContentPane().add(lblA);
		lblA.setFont(new Font("Dialog", Font.PLAIN, 24));
		lblA.setBounds(36,24,36,36);
		lblOp.setText("");
		getContentPane().add(lblOp);
		lblOp.setFont(new Font("Dialog", Font.PLAIN, 24));
		lblOp.setBounds(72,24,36,36);
		lblB.setText("");
		getContentPane().add(lblB);
		lblB.setFont(new Font("Dialog", Font.PLAIN, 24));
		lblB.setBounds(108,24,33,36);
		label5.setText("=");
		getContentPane().add(label5);
		label5.setFont(new Font("Dialog", Font.PLAIN, 24));
		label5.setBounds(168,24,34,36);
		getContentPane().add(txtAnswer);
		txtAnswer.setFont(new Font("Dialog", Font.PLAIN, 24));
		txtAnswer.setBounds(216,24,85,42);
		listDisp.setFont(new Font("Dialog", Font.PLAIN, 16));
		getContentPane().add(listDisp);
		listDisp.setBounds(36,144,272,106);
		//}}
	
		//{{REGISTER_LISTENERS
		SymAction lSymAction = new SymAction();
		btnNew.addActionListener(lSymAction);
		btnJudge.addActionListener(lSymAction);
		//}}
	}
	
	//{{DECLARE_CONTROLS
	java.awt.Button btnNew = new java.awt.Button();
	java.awt.Button btnJudge = new java.awt.Button();
	java.awt.Label lblA = new java.awt.Label();
	java.awt.Label lblOp = new java.awt.Label();
	java.awt.Label lblB = new java.awt.Label();
	java.awt.Label label5 = new java.awt.Label();
	java.awt.TextField txtAnswer = new java.awt.TextField();
	java.awt.List listDisp = new java.awt.List(0);
	//}}

	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == btnNew)
				btnNew_ActionPerformed(event);
			else if (object == btnJudge)
				btnJudge_ActionPerformed(event);
		}
	}

	void btnNew_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		a = (int)(Math.random()*9+1);
		b = (int)(Math.random()*9+1);
		int c = (int)(Math.random()*4);
		switch( c )
		{
		    case 0: op="+"; result=a+b; break;
		    case 1: op="-"; result=a-b; break;
		    case 2: op="*"; result=a*b;break;
		    case 3: op="/"; result=a/b;break;
		}
		lblA.setText(""+a);
		lblB.setText(""+b);
		lblOp.setText(""+op);
		txtAnswer.setText("");
	    
			 
	}
	
	int a=0,b=0;
	String op="";
	double result=0;

	void btnJudge_ActionPerformed(java.awt.event.ActionEvent event)
	{
		String str = txtAnswer.getText();
		double d = Double.valueOf(str).doubleValue();
		String disp = "" + a + op + b+"="+ str +" ";
		if( d == result ) disp += "☆";
		else disp += "╳";
		
		listDisp.add( disp );
	}

	public static void main(String [] args)
	{
		AutoScore f = new AutoScore();
	}
}
  • 画同心圆
package chapt1;
import java.awt.*;
import javax.swing.*;

public class Circle99Frame extends JFrame{
	public static void main(String[] args) {
		JFrame frame = new Circle99Frame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600,600);
		frame.setVisible(true);
	}
	public void paint(Graphics g) {
		g.drawString("Circle 99", 20, 20);
		int x0 = getSize().width/2;
		int y0 = getSize().height/2;
		for(int r=0;r<getSize().height/2;r+=10)
			g.drawOval(x0-r, y0-r, r*2, r*2);
	}
}

  • 带标签的continue语句使用
public class Prime100Continue{
	public static void main( String args[ ] ){
		System.out.println(" **** 100--200的质数 ****");
		int n=0;
		outer: for(int i=101;i<200;i+=2){ //外层循环
			for(int j=2; j<i; j++){ //内层循环
				if( i%j==0 )		//不是质数,则继续外层循环
					continue outer;
			}
			System.out.print(" "+i);//显示质数
			n++;					//计算个数 
			if( n<10 )				//未满10个数,则不换行
				continue;	
			System.out.println( );
			n=0;
		}
		System.out.println( );
	}
}
  • Java中的数组是引用类型,所以int a[5]非法,int[] a = new int[5]才是正确写法,同时在分配空间的时候对每个元素按照成员变量同样的方式隐式初始化。
int[] a = new int[10];
for(int i=0;i<a.length;i++){
	System.out.println(a[i]);
}

Enhanced for

for(int b:a){
	System.out.println(b);
}

*注意这种方式是只读式的遍历
数组复制:

System.arraycopy(source,0,dest,0,source.Length);
数组复制的常用方法有4种
for循环,效率最低
System.arraycopy() 效率最高
Arrays.copyOf() 效率次于第二种方法
Object.clone() 效率次于第二种和第三种
  • 从1-36中选7个数
package chapt1;

public class Rnd_36_7 {
	public static void main(String[] args) {
		int a[] = new int[7];
		for(int i=0;i<a.length;i++){
			one_num:
				while(true){
					a[i] = (int)(Math.random()*36)+1;
					for(int j=0;j<i;j++){
						if(a[i] == a[j])continue one_num;
					}
					break;
				}
		}
		for(int num:a)System.out.println(num+" ");
	}	
}

*不用带标签的continue的语法的话需要加一个标记变量实现,略

  • ,做分隔符读入数据:(如1,2,3,[回车符]
package chapt1;
import java.util.Scanner;
public class IO {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in).useDelimiter("\\s*,\\s*");
        while(scan.hasNextInt()){
        	int a = scan.nextInt();
        	System.out.println(a);
        }
        scan.close();
	}
}

Java编程练习>
1.输入整数m和n,求其最大公约数和最小公倍数

package chapt1;
import java.util.Scanner;
public class hw001 {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int a,b;
        a = scan.nextInt();
        b = scan.nextInt();
        System.out.printf("%d与%d的最大公约数为:%d\n",a,b,gcd(a,b));
        System.out.printf("%d与%d的最小公倍数为:%d\n",a,b,lcm(a,b));
	}
	private static int gcd(int a,int b) {
		if(b!=0)return gcd(b,a%b); 
		else return a;
	}
	private static int lcm(int a,int b) {
		return a*b/gcd(a,b);
	}
}

2.输入若干个整数,求其最大值、最小值和平均值

package chapt1;
import java.util.Scanner;
public class hw002{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.print("请输入数据的个数:");
		int length = scan.nextInt();
		int num[] = new int[length];
		for(int i=0;i<length;i++){
			num[i] = scan.nextInt();
		}
		int max_value = -100000000,min_value = 100000000;
		double avg = 0.0;
		for(int i=0;i<length;i++){
			if(num[i]>max_value)max_value = num[i];
			if(num[i]<min_value)min_value = num[i];
			avg += num[i];
		}
		avg /= length;
		System.out.printf("最大值:%d,最小值:%d,平均值:%f",max_value,min_value,avg);
	}
}

3.求出自然数101~199中的所有素数

package chapt1;
import java.util.Scanner;
public class hw003{
	public static void main(String[] args){
		loop:for(int i=101;i<=199;i++){
			for(int j=2;j<=Math.sqrt(i);j++){
				if(i%j==0)continue loop;
			}
			System.out.println("发现素数:"+i);
		}
	}
}

4.顺序输出1到100之间所有能被7整除的整数

package chapt1;
import java.util.Scanner;
public class hw004 {
	public static void main(String[] args){
		for(int i=1;i<=100;i++)if(i%7==0){
			System.out.println(i);
		}
	}
}

5.已知2000.1.1是星期六,根据任意给定的日期(2000年以后的),请编程计算出该天是星期几

package chapt1;
import java.util.Scanner;
public class hw005{
	static int arr[] = {31,28,31,30,31,30,31,31,30,31,30,31};
	static int ans[] = {6,7,1,2,3,4,5};
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.print("输入日期(eg: 2000 1 10):");
		int year = sc.nextInt(),month = sc.nextInt(),day = sc.nextInt();
		int tot = 0;
		if(year>2000){
			tot += 1;//2000 闰年
			tot += 365*(year-2000);
			tot += (year-1-2000)/4;
			tot -= (year-1-2000)/100;
			tot += (year-1-2000)/400;
		}
		for(int i=1;i<month;i++){
			if(i==2&&year%4==0&&(year%100!=0||year%400==0))tot++;
			tot+=arr[i-1];
		}
		tot+=day-1;
		System.out.println(ans[tot%7]);
	}
}

6.猜数游戏,随机生成一个整数(0-100),用户输入他所猜的数,程序回答大了或小了,用户再输入他所猜的数,直至猜对了为止

package chapt1;
import java.util.Scanner;
public class hw006{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int x = (int)(Math.random()*100);
		int guess = -1;
		while(guess!=x){
			System.out.print("请输入您猜的数(0-100):");
			guess = sc.nextInt();
			if(guess<x){
				System.out.println("猜小了");
			}else if(guess>x){
				System.out.println("猜大了");
			}else break;
		}
		System.out.println("恭喜您猜对了");
	}
}
  • Java中的字符串


    比较:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2);
System.out.println(str1 == str3);

output:

true
false


  • 字符串比较方法
  • 搜索字符和字符串

    *如果没有找到返回-1

  • 字符串提取、连接和替换等方法
  • 字符串与模式匹配

    举例:
		String str1="12abc56rg";
		String str2="sfabc16";
		 int i,j,k;
		 for(i=1;i<str1.length();i++)       //子串的长度从1开始
	               for(j=0;j<str1.length();j++)    //str1的子串
	        //判断str1中的子串是否在str2中出现
		        for(k=0;k<=str2.length();k++)
			 if(str1.regionMatches( j, str2 ,k, i )) 
	                          System.out.println(str1.substring(j,j+i));
  • 关于scanner的next()方法使用的小细节:


  • java实现输出杨辉三角
		int mat[][] = new int[10][];
		for(int i=0;i<10;i++){
			mat[i] = new int[i+1];
			mat[i][0] = 1; mat[i][i] = 1;
			for(int j=1;j<i;j++){
				mat[i][j] = mat[i-1][j-1]+mat[i-1][j];
			}
		}
		for(int i=0;i<10;i++){
			for(int j=0;j<9-i;j++)System.out.print(" ");
			for(int j=0;j<=i;j++)System.out.print(" "+mat[i][j]);
			System.out.println();
		}

-例题:用向量实现,创建3个学生对象(学号、姓名、年龄)和4个教师对象(教工号、姓名、系别),并且输出

package chapt1;

import java.util.*;

class test {

  public static void main(String[] args) {
	  Vector<Object> vec = new Vector();
	  vec.addElement(new Student("101","张三",18));
	  vec.addElement(new Student("102","李四",19));
	  vec.addElement(new Teacher("001","王五","计算机"));
	  vec.addElement(new Teacher("002","麻六","软件工程"));
	  for(int i=0;i<vec.size();i++){
		  if((vec.elementAt(i)) instanceof Student)
			  ((Student)vec.elementAt(i)).disp();
		  else ((Teacher)vec.elementAt(i)).disp();
	  }
  }
}

class Student{
	String xuehao,xingming;
	int nianling;
	public Student(){}
	public Student(String tXuehao,String tXingming,int tNianling) {
		xuehao = tXuehao; xingming = tXingming; nianling = tNianling;
	}
	public void disp(){
		System.out.println("学生:"+xuehao+" "+xingming+" "+nianling);
	}
}
class Teacher{
	String jiaogonghao,xingming,xibie;
	public Teacher(){}
	public Teacher(String tJiaogonghao,String tXingming,String tXibie){
		jiaogonghao = tJiaogonghao; xingming = tXingming; xibie = tXibie;
	}
	public void disp(){
		System.out.println("教师:"+jiaogonghao+" "+xingming+" "+xibie);
	}
}
  • 编程实现判断字符串1是否在字符串2中出现,如果出现,则用字符串3替换
package chapt1;

import java.util.*;

class test {

  public static void main(String[] args) {
	  StringBuffer s1 =  new StringBuffer("563ty23tyio");
      String s2="ty",s3="abc";
      int l=0;
      while( (l=s1.indexOf(s2,l))>=0)
      {   s1.replace(l,l+s2.length(),s3);
      }
      System.out.print(s1.toString());   
  }
}
  • 用二维数组实现,5个学生7门课程总分的平均分的统计工作
package chapt1;

import java.util.*;

class test {

  public static void main(String[] args) {
	  int cj[][]= new int[5][7],i,j,sum=0;
      Scanner sc=new Scanner(System.in);
      for(i=0;i<5;i++)
      	for(j=0;j<7;j++)
      	{cj[i][j]=sc.nextInt();
             sum+=cj[i][j];}
         System.out.print(sum/35);
  }
}

编程练习>

  1. 输入一个字符串,统计字符串中单词的个数
package chapt1;
import java.util.*;
class test {
  public static void main(String[] args) {
	  String str = "one two three four five six seven";
	  System.out.println(str.split(" ").length);
  }
}
  1. 输入一个英文句子,将其中的单词分别打印出来,一个单词一行
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  String str = "one two three four five six seven";
	  String str2[] = str.split(" ");
	  for(String i:str2){
		  System.out.println(i);
	  }
  }
}
  1. 输入一个字符串,判断其中字母、数字、其他字符的个数
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  System.out.print("请输入要分析的字符串:");
	  String str = sc.nextLine();
	  int zimu=0,shuzi=0,otr=0;
	  for(int i=0;i<str.length();i++){
		  if(str.charAt(i)>='a'&&str.charAt(i)<='z'||str.charAt(i)>='A'&&str.charAt(i)<='Z'){
			  zimu++;
		  }else if(str.charAt(i)>='0'&&str.charAt(i)<='9')shuzi++;
		  else otr++;
	  }
	  System.out.printf("字母:%d,数字:%d,其他字符:%d",zimu,shuzi,otr);
  }
}
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  System.out.print("请输入要分析的字符串:");
	  String str = sc.nextLine();
	  int zimu=0,shuzi=0,otr=0;
	  for(int i=0;i<str.length();i++){
		  if(Character.isAlphabetic(str.charAt(i))){
			  zimu++;
		  }else if(Character.isDigit(str.charAt(i)))shuzi++;
		  else otr++;
	  }
	  System.out.printf("字母:%d,数字:%d,其他字符:%d",zimu,shuzi,otr);
  }
}
  1. 编程将一个StringBuffer类对象中的所有小写字母变为大写字母,然后输出显示
package chapt1;
import java.util.*;
class test {
  public static void main(String[] args) {
	  StringBuffer str = new StringBuffer("abcEsaf923safSFa000\naf");
	  for(int i=0;i<str.length();i++)
		  if(Character.isUpperCase(str.charAt(i)))
			  str.setCharAt(i, Character.toLowerCase(str.charAt(i)));
	  System.out.println(str);
  }
}
package chapt1;
import java.util.*;
class test {
  public static void main(String[] args) {
	  StringBuffer str = new StringBuffer("abcEsaf923safSFa000\naf");
	  str = new StringBuffer(str.toString().toLowerCase());
	  System.out.println(str);
  }
}
  1. 编程实现从键盘依次输入姓名(字符串)、年龄(整型)、性别(字符)和成绩(浮点型),然后依次显示上述内容
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  String xingming = sc.next();
	  int nianling = sc.nextInt();
	  char xingbie = sc.next().charAt(0);//注意
	  double chengji = sc.nextDouble();
	  System.out.print("姓名:"+xingming+",年龄:"+nianling+",性别:"+xingbie+"成绩:"+chengji);
	  sc.close();
  }
}
  1. 输入的一个字符串中包含了一个人的姓名、性别和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋给相应的变量。表示年龄的变量是整型的。
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  String str = "张三 男 18";
	  String str2[] = str.split(" ");
	  String xingming;
	  char xingbie;
	  int nianling;
	  xingming = str2[0];
	  xingbie = str2[1].charAt(0);
	  nianling = Integer.parseInt(str2[2]);
	  System.out.println("姓名:"+xingming+",性别:"+xingbie+",年龄:"+nianling);
  }
}
  1. 模拟打牌游戏中的发牌过程。用1~52来代表52张牌,玩家有四人,要求将发牌结果存入一个二维数组(4行12列),最后显示发牌结果。不许重复
package chapt1;
import java.util.*;
class test {
  public static void main(String[] args) {
	  int[][] cards = new int[4][13];
	  boolean[] flag = new boolean[52];
	  int card = 0;
	  for(int i=0;i<4;i++){
		 for(int j=0;j<13;j++){
			 while(flag[(card = (int)(Math.random()*52)+1)-1]==true);
			 flag[card-1]=true;
			 cards[i][j]=card;
		 }
	  }	 
	  for(int i=0;i<4;i++){
		  for(int j=0;j<13;j++)
			  System.out.print(cards[i][j]+" ");
		  System.out.println();
	  }
  }
}
  1. 输入多个字符串,存入数组,然后按照字符串的大小重新升序排列
package chapt1;
import java.util.*;
class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  String preStr = sc.nextLine();
	  String[] str = preStr.split(" ");
	  Arrays.sort(str);
	  for(int i=0;i<str.length;i++)
		  System.out.println(str[i]);
  }
}
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  String preStr = sc.nextLine();
	  String[] str = preStr.split(" ");
	  int change = 0;
	  for(int i=0;i<str.length-1;i++){
		  change = i;
		  for(int j=1;j<str.length;j++)
			  if(str[change].compareTo(str[j])>0)change = j;
		  if(change != i){
			  String tmp = str[change];
			  str[change] =  str[i];
			  str[i] = tmp;
		  }
	  }		  
	  for(int i=0;i<str.length;i++)
		  System.out.println(str[i]);
  }
}
  1. 使用二维数组存储学生的数据,包括学号、姓名、操作系统成绩、Java成绩、高数成绩、总分。一行存储一个学生的数据。要求输入若干学生的数据,求出总分。然后按照总分由高到低重新排列。输出排序后的结果
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  System.out.print("请输入数据条数:");
	  int len = sc.nextInt();
	  //学号、姓名、操作系统成绩、Java成绩、高数成绩、总分
	  String[][] data = new String[len][6];
	  for(int i=0;i<len;i++){
		  data[i][0] = sc.next();
		  data[i][1] = sc.next();
		  data[i][2] = sc.next();
		  data[i][3] = sc.next();
		  data[i][4] = sc.next();
		  data[i][5] = String.valueOf(Double.parseDouble(data[i][2])+Double.parseDouble(data[i][3])
		  	+Double.parseDouble(data[i][4]));
	  }
	  int change = 0;
	  for(int i=0;i<data.length;i++){
		  change = i;
		  for(int j=i+1;j<data.length;j++)
			  if(Double.parseDouble(data[change][5])<Double.parseDouble(data[j][5]))change = j;
		  if(change != i){
			  String[] tmp = data[change];
			  data[change] = data[i];
			  data[i] = tmp;
		  }
	  }
	  for(int i=0;i<data.length;i++){
		  for(int j=0;j<data[i].length;j++)
			  System.out.print(data[i][j]+" ");
		  System.out.println();
	  }
  }
}
package chapt1;

import java.util.*;

class test {
  public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  System.out.print("请输入数据条数:");
	  int len = sc.nextInt();
	  //学号、姓名、操作系统成绩、Java成绩、高数成绩、总分
	  String[][] data = new String[len][6];
	  for(int i=0;i<len;i++){
		  data[i][0] = sc.next();
		  data[i][1] = sc.next();
		  data[i][2] = sc.next();
		  data[i][3] = sc.next();
		  data[i][4] = sc.next();
		  data[i][5] = String.valueOf(Double.parseDouble(data[i][2])+Double.parseDouble(data[i][3])
		  	+Double.parseDouble(data[i][4]));
	  }
	  Arrays.sort(data,new Comparator<String[]>(){
		  public int compare(String[] a,String[] b){
			  return -(int)(Double.parseDouble(a[5])-Double.parseDouble(b[5]));
		  }
	  });
	  for(int i=0;i<data.length;i++){
		  for(int j=0;j<data[i].length;j++)
			  System.out.print(data[i][j]+" ");
		  System.out.println();
	  }
  }
}

*参考PKU-Java程序设计课程资料以及NCEPU-Java程序设计课程资料
*未经授权请勿转载

发布了634 篇原创文章 · 获赞 579 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/qq_33583069/article/details/103159125