import java.util.Scanner;
public class duiProject {
public static void main(String[]args)throws Exception
{
int[]data=new int[2000];
input(data);
heap_sort(data);
}
public static void input(int[] data)throws Exception
{
java.io.File file1=new java.io.File("D:\\eclipse——workplace\\heapin.txt");
Scanner input=new Scanner(file1);
int i;
for(i=1;i<data.length;i++)
{
data[i]=input.nextInt();
}
input.close();
}
public static void output(int[] data, String str)throws Exception
{
java.io.File file2=new java.io.File("heapout.txt");
java.io.PrintWriter output=new java.io.PrintWriter(file2);
output.println(str);
for(int i=0; i<data.length; i++)
output.print(data[i] + " ");
output.println();
output.close();
}
public static void heap_sort(int []data)throws Exception
{
int n=data.length;
int temp=0;
output(data, "Before sort : ");
for(int i=n/2; i>0; i--)
Adjust(data, i-1, n);
for(int i=n-2; i>=0; i--)
{
temp = data[i+1];
data[i+1] = data[0];
data[0] = temp;
Adjust(data, 0, i+1);
}
output(data, "After  sort : ");
}
public  static void Adjust(int[] data, int i, int n)
{
int j = 0;
int temp = 0;
temp = data[i];
j = 2 * i + 1;
while(j <= n-1)
{
if(j < n-1 && data[j] < data[j+1])
j++;
if(temp >= data[j])
break;
data[(j-1)/2] = data[j];
j = 2 * j + 1;
}
data[(j-1)/2] = temp;
}
}菜鸟实在搞不懂啊
错误显示Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at duiProject.input(duiProject.java:16)
at duiProject.main(duiProject.java:6)

解决方案 »

  1.   

    第14行 for(i=1;i<data.length;i++), 貌似应该从0开始
      

  2.   

    import java.util.Scanner;
    public class duiProject {
    public static void main(String[]args)throws Exception
    {
    int[]data=new int[2000];
    input(data);
    heap_sort(data);
    }
    public static void input(int[] data)throws Exception
    {
    java.io.File file1=new java.io.File("E:\\eclipse——workplace\\heapin.txt");
    Scanner input=new Scanner(file1);
    int i=0;
    while(input.hasNext())
    {
    data[i]=input.nextInt();
    i++;
    }
        input.close();
    }
    public static void output(int[] data, String str)throws Exception
    {
    java.io.File file2=new java.io.File("heapout.txt");
    java.io.PrintWriter output=new java.io.PrintWriter(file2);
    output.println(str);
    for(int i=0; i<data.length; i++)
    output.print(data[i] + " ");
    output.println();
    output.close();
    }
    public static void heap_sort(int []data)throws Exception
    {
    int n=data.length;
    int temp=0;
    output(data, "Before sort : ");
    for(int i=n/2; i>0; i--)
    Adjust(data, i-1, n);
    for(int i=n-2; i>=0; i--)
    {
    temp = data[i+1];
    data[i+1] = data[0];
    data[0] = temp;
    Adjust(data, 0, i+1);
    }
    output(data, "After  sort : ");
    }
    public  static void Adjust(int[] data, int i, int n)
    {
    int j = 0;
    int temp = 0;
    temp = data[i];
    j = 2 * i + 1;
    while(j <= n-1)
    {
    if(j < n-1 && data[j] < data[j+1])
    j++;
    if(temp >= data[j])
    break;
    data[(j-1)/2] = data[j];
    j = 2 * j + 1;
    }
    data[(j-1)/2] = temp;
    }
    }
    编译没问题了,运行结果不对呢。求解答!!!
      

  3.   

    把 data=input(date) 方法也改了
      

  4.   

    什么意思?
    我调试了输入没问题,就是输出有问题,不知道是不是排序出的问题
    值没有传递应该是
    public static int[] input(date)
    改成这种模式看看
      

  5.   

    什么意思?
    我调试了输入没问题,就是输出有问题,不知道是不是排序出的问题
    值没有传递应该是
    public static int[] input(date)
    改成这种模式看看
    不对了呀?
    编译错误了就
      

  6.   

    output(int[] data, String str)方法在每次输出时,都新建一个PrintWriter,
    因此每次调用output方法,都会用新内容覆盖掉新的内容。
    可以通过取消heapsort方法中的第二个output方法,查看heapout.txt的内容,
    可以看到是排序前的内容。更改output方法,向heapout.txt增加内容,而不是覆盖