在我的程序上获得一个奇怪的输出,不知道下一步该怎么做才能修复它



所以我在这个程序上呆了一段时间,我已经让一切工作了,没有编译错误,但现在我得到了一个奇怪的输出,首先病态地发布了程序的问题。

import java.util.Scanner;
import java.util.*;
public class project3 {
    private static double[] payrate;
    private static String[] names;
    public static void SortData(double payrate[]) {
        int first;
        int temp;
        int i;
        int j;
        for (i = payrate.length - 1; i > 0; i--) {
            first = 0;
            for (j = 1; j <= i; j++) {
                if (payrate[j] < payrate[first]) {
                    first = j;
                }
            }
            temp = (int) payrate[first];
            payrate[first] = payrate[i];
            payrate[i] = temp;
        }
    }
    public static void GetData() {
        Scanner input = new Scanner(System.in);
        System.out.println("How many names do you want to enter?");
        String strNum = input.nextLine();
        int num = Integer.parseInt(strNum);
        int array[] = new int[num];
        for (int i = 0; i < array.length; i++) {
            names = new String[num];
            System.out.println("enter employee's name: ");
            names[i] = input.nextLine();
                            //while(names[i].length < 2)
            //{
            //System.out.println("enter valid employee's name: ");
                            //names[i] = input.nextLine(); 
            //} 
        }
        for (int j = 0; j < array.length; j++) {
            payrate = new double[num];
            System.out.println("enter employee's payrate: ");
            payrate[j] = input.nextDouble();
            while (payrate[j] > 100 || payrate[j] < 0) {
                System.out.println("enter valid employee's payrate: ");
                payrate[j] = input.nextDouble();
            }
        }
    }
    public static void DisplayData(double payrate[], String names[]) {
        System.out.printf("Name    PayRaten");
        for (int l = 0; l < names.length; l++) {
            //for(int i=0;i<names.length;i++)
            // {
            System.out.print(names[l]);
            System.out.printf("n", payrate[l]);
            //} 
        }
    }
    public static void main(String[] args) {
        GetData();
        SortData(payrate);
        DisplayData(payrate, names);
    }
}

该程序应该打印出这样的东西

Name      Payrate
Daniel    54.76
josh      73.12
kyle      12.54

但是程序正在打印出这个

Name    PayRate
null
null
null
null
qt
这里有

一些你可以纠正它的地方。

  1. GetData(),你应该把names = new String[num];放在任何地方在循环开始之前,所以Deos payrate = new double[num];.

  2. SortData()中,为什么不使用double temp;? 那么你不必将payrate[first]变成int类型。

  3. DisplayData()System.out.printf("n", payrate[l]); 除了换行什么都没有。我认为最好这样做

    System.out.printf("NametPayRaten");
    for (int l = 0; l < names.length; l++) {
        System.out.print(names[l]);
        System.out.println("t"+payrate[l]);
    }
    

好吧,用代码解释比用英语更容易。 :'(

public static void SortData(double payrate[]) {
    int first;
    double temp;
    String tempString;
    int i;
    int j;        
    for (i = payrate.length - 1; i > 0; i--) {
        first = 0;
        for (j = 1; j <= i; j++) {
            if (payrate[j] < payrate[first]) {
                first = j;
            }
        }
        temp = payrate[first];
        payrate[first] = payrate[i];
        payrate[i] = temp;
        tempString = names[first];
        names[first] = names[i];
        names[i] = tempString;
    }
}

最新更新