2012-03-30 7 views
1

Das Programm gibt beim Vergleichen eine Reihe von Nullen aus. Ich denke ich vergleiche nicht richtig, obwohl ich es versucht habe == und das gibt nichts aus. Unten ist der Code und darunter ist die NameAgeOcc.txtVergleichen von String-Arrays Ausgaben Null

import java.util.Scanner; 
import java.io.*; 
public class MoreSelectionSortAndParallelArrays 
{ 
public static void main(String[] args) 
{ 
    Scanner inputStream = null; 

    try 
    { 
     inputStream = new Scanner(new FileInputStream("NameAgeOcc.txt")); 
    } 

    catch(FileNotFoundException error) 
    { 
     System.out.println("Unable to open input file."); 
     System.exit(0); 
    } 

    int length=inputStream.nextInt(); 
    int ages [] = new int[length]; 
    String names [] = new String[length]; 
    String occupations [] = new String[length]; 
    String junk= inputStream.nextLine() ; 
    int i; 
    for(i=0;i<length;i++) 
    { 
     names[i]=inputStream.nextLine(); 
     ages[i]=inputStream.nextInt(); 
     junk=inputStream.nextLine(); 
     occupations[i]=inputStream.nextLine(); 
    } 
    System.out.printf("%-25s%-8s%24s%n","Names"," Ages","Occupations"); 
    for(i=0;i<length;i++) 
    { 
     System.out.printf("%-25s%6d%24s%n",names[i],ages[i],occupations[i]); 
    } 
    String Temp, Temp3; 
    int minVal,minPos,y,Temp2; 
    for(i=0;i<length;i++) 
    { 
     minVal=ages[i]; 
     minPos=i; 
     for(y=i+1;y<length;y++) 
     { 
      if(ages[y]<minVal) 
      { 
       minVal=ages[y]; 
       minPos=y; 
      } 
     } 
     Temp2 = ages[minPos]; 
     ages[minPos] = ages[i]; 
     ages[i] = Temp2; 
     Temp = names[minPos]; 
     names[minPos] = names[i]; 
     names[i] = Temp; 
     Temp3 = occupations[minPos]; 
     occupations[minPos] = occupations[i]; 
     occupations[i] = Temp3; 
    } 
    System.out.println(); 
    System.out.printf("%-25s%-8s%24s%n","Names"," Ages","Occupations"); 
    for(i=0;i<length;i++) 
    { 
        System.out.printf("%-25s%6d%24s%n",names[i],ages[i],occupations[i]); 
    } 
    int studentCount=0; 
    for (i=0;i<length;i++) 
    { 
     if(occupations[i].equalsIgnoreCase("student")); 
     studentCount++; 
    } 
    int studentAges [] = new int[studentCount]; 
    String studentNames [] = new String[studentCount]; 
    System.out.printf("%-25s%-8s%n","Names"," Ages"); 

    for (i=0;i<studentCount;i++) 
    { 
     System.out.printf("%-25s%6d%n",studentNames[i],studentAges[i]); 
    } 
inputStream.close(); 
} 
} 

Die .txt

15 
Smith, John 
26 
Baker 
Jones, Susan 
15 
Student 
Mouse, Mickey 
31 
Theme park employee 
Mouse, Mighty 
48 
Cartoon super hero 
Anderson, William 
35 
Computer Programmer 
Parker, Cindy 
18 
Author 
McCain, John 
20 
Student 
Armstrong, Michelle 
17 
Student 
Thompson, Anne 
29 
Doctor 
Li, Steve 
15 
Student 
James, Tanya 
20 
Student 
Moore, James 
32 
Teacher 
Andrews, Julie 
75 
Actress 
Obama, Michelle 
46 
Lawyer 
Michaels, Todd 
51 
Student 

Achten Sie darauf, die leere Zeile am Ende der .txt (drücken Sie die Eingabetaste oder zurück) kopieren

Antwort

0

Programm gibt eine Menge Nullen aus, weil Sie studentAges und erstellen, aber Sie fügen nichts hinzu.

@ Antwort Paweł Adamskis ist falsch

if(occupations[i].equalsIgnoreCase("student")); 
studentCount++; 

bedeutet, dass Sie studentCount immer steigen.

Ich würde Ihnen empfehlen, einige innere Klasse zu verwenden und Arrays.sort() zum Sortieren zu verwenden (Sie müssen vergleichbare Schnittstelle implementieren oder Comparator-Schnittstelle zum Sortieren implementieren).

+0

Danke. Ich fühle mich jetzt irgendwie dumm, aber ich habe es funktioniert! – Chromey

0

ich habe den Code kurz überprüfen, und ich habe dies gefunden:

if(occupations[i].equalsIgnoreCase("student")); 
studentCount++; 

";" am Ende von "if" bewirkt, dass studentCount immer inkrementiert wird.

Natürlich könnte es weitere Fehler in Ihrem Code geben. Wenn Sie möchten, dass die Leute Ihnen helfen, sollten Sie erklären, was Ihr Programm macht.

+0

Okay, mein Programm ist (zumindest der Teil, mit dem ich Probleme habe), die Schüler im Besetzungsarray zu zählen und dann neue Matrizen, studentNames und studentAges zu erstellen und dann studentNames in alphabetischer Reihenfolge zu organisieren, während studentAges beibehalten wird intakt. – Chromey

+0

Ich habe meine Antwort nach @Betlista Beitrag korrigiert. –