日期:2014-05-20  浏览次数:20540 次

请问这个怎么处理,小弟新手
import java.util.Scanner;

public class RankOfStudents {

  public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  System.out.print("Enter the numbers of students: ");
  int numbers = input.nextInt();
  inputName(numbers);
  inputScore(numbers);
  rank(inputName(numbers), inputScore(numbers), numbers);

  }

  public static String[] inputName(int numbers) {
  Scanner input = new Scanner(System.in);
  String[] name = new String[30];
  int i;
  for (i = 0; i < numbers; i++) {
  System.out.print("Enter the name of student" + i + ": ");
  name[i] = input.nextLine();
  }
  return name;
  }

  public static double[] inputScore(int numbers) {
  Scanner input = new Scanner(System.in);
  double[] score = new double[numbers];
  int i;
  for (i = 0; i < numbers; i++) {
  System.out.print("Enter the score of student" + i + ": ");
  score[i] = input.nextDouble();
  }
  return score;

  }

  public static void rank(String[] name, double[] score, int numbers) {
  int i = 0;
  String middle;
  double change;
  for (i = 0; i < numbers; i++) {
  if (score[i] < score[i + 1]) {
  change = score[i + 1];
  score[i + 1] = score[i];
  score[i] = change;
  middle = name[i + 1];
  name[i + 1] = name[i];
  name[i] = middle;
  }
  }
  for (int j = 0; j < numbers; j++) {
  System.out.print(name[i] + " ");
  System.out.println("");
  System.out.print(score[i] + " ");
  System.out.println(" ");
  }
  }
}


------解决方案--------------------
inputName(numbers);
inputScore(numbers);
rank(inputName(numbers), inputScore(numbers), numbers);
这里有问题,他会重复调用两次。
for (i = 0; i < numbers; i++) {
if (score[i] < score[i + 1]) {
change = score[i + 1];
score[i + 1] = score[i];
score[i] = change;
middle = name[i + 1];
name[i + 1] = name[i];
name[i] = middle;
}
}
这个循环也有问题,会越界的。
改成:
rank(inputName(numbers), inputScore(numbers), numbers);

for (i = 0; i < numbers-1; i++) {
if (score[i] < score[i + 1]) {
change = score[i + 1];
score[i + 1] = score[i];
score[i] = change;
middle = name[i + 1];
name[i + 1] = name[i];
name[i] = middle;
}
}

------解决方案--------------------
Java code

        for (i = 0; i < numbers-1; i++) {
            if (score[i] < score[i + 1]) {
                change = score[i + 1];
                score[i + 1] = score[i];
                score[i] = change;
                middle = name[i + 1];
                name[i + 1] = name[i];
                name[i] = middle;
            }
        }

------解决方案--------------------
Java code
import java.util.Scanner;

public class RankOfStudents {

  public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  System.out.print("Enter the numbers of students: ");
  int numbers = input.nextInt();
  String[] names = inputName(numbers);
  double[] scores =inputScore(numbers);
  rank(names, scores, numbers);
  //rank(inputName(numbers), inputScore(numbers), numbers); //直接放进去 ,否则会调用两次

  }

  public static String[] inputName(int numbers) {
  Scanner input = new Scanner(System.in);
  String[] name = new String[30];
  int i;
  for (i = 0; i < numbers; i++) {
      System.out.print("Enter the name of student" + i + ": ");
      name[i] = input.nextLine();
  }
  return name;
  }

  public static double[] inputScore(int numbers) {
  Scanner input = new Scanner(System.in);
  double[] score = new double[numbers];
  int i;
  for (i = 0; i < numbers; i++) {
      System.out.print("Enter the score of student" + i + ": ");
      score[i] = input.nextDouble();
  }
  return score;

  }

  public static void rank(String[] name, double[] score, int numbers) {
  int i = 0;
  String middle;
  double change;
  //冒泡排序一下
    for(int k = 0 ; k < numbers; k++){
          for (i = k+1 ; i < numbers; i++) {
              if (score[k] < score[i]) {
                  System.out.println(score[k] + "   " +  score[i]) ;
                  change = score[i];
                  score[i] = score[k];
                  score[k] = change;
                  //System.out.println(score[i] + "   " +  score[i + 1]) ;
                  middle = name[i];
                  name[i] = name[k];
                  name[k] = middle; 
              }
          }
        }
      
      
  for (int j = 0; j < numbers; j++) {
      System.out.println("student - " + j +" :") ;
      System.out.print(name[j] + " "); //System.out.print(name[i] + " ");  i 应该为 j 
      
      System.out.println("");
      System.out.print(score[j] + " "); //System.out.print(score[i] + " "); i 应该为 j
      System.out.println(" ");
  }
 }
}