0

我的任务是三个不同的任务中的第三个。就我而言,我想我差不多完成了,但是我在程序的最后一行收到了编译错误。我将打印它所在的整个方法:

void ordParInn(Scanner innfil, int antOrd, int antUnikeOrd, String[] ord) {
    int[][] ordParTelling = new int[antOrd][antOrd];
    int sc1, sc2;
    String forrigeOrd = "";
    sc1 = 0;
    sc2 = 0;

    while (innfil.hasNext()) {
        String ordLest = innfil.next().toLowerCase();

        for (int i = 0; i < ord.length; i++) {

            sc1 = Arrays.asList(antUnikeOrd).indexOf(ordLest);
            sc2 = Arrays.asList(antUnikeOrd).indexOf(forrigeOrd);

            if (sc1 > 0 && sc2 > 0) {
                ordParTelling[sc2][sc1]++;
            }
            forrigeOrd = ordLest;
        }

        int alice = Arrays.asList(antUnikeOrd).indexOf("Alice");
        for (int i = 0; i < antUnikeOrd; i++) {
            if (ordParTelling[alice][i] > 0) {
                System.out.print(ordParTelling[alice][i]);
                //On the underneath line the error occurs, at the antUnikeOrd[i]
                System.out.print("    " + antUnikeOrd[i] + "    " + Arrays.asList(antUnikeOrd).indexOf(antUnikeOrd));
            }
        }
    }
}

请帮忙。整个代码:

import java.util.*;
import java.io.*;

class Oblig3C{
    public static void main(String[]args){

    OrdAnalyse oa = new OrdAnalyse();
    String filArgs=args[0];
    oa.analyseMetode(filArgs);
    }
}

class OrdAnalyse{
    void analyseMetode(String filArgs){

    //Begynner med aa opprette alle variabler som trengs, disse deklareres rett under. De ligger her oppe bare for at jeg skal ha oversikten over de.
    Scanner input, innfil;
    String[] ord;
    int[] antall;
    int antUnikeOrd, antOrd;
    PrintWriter utfil;
    boolean sjekk;

    //Deklarerer alle bortsett fra de som har med fil aa gjore, disse deklareres inne i en try-catch-loop (printwriter utfil og scanner innfil).
    input=new Scanner(System.in);
    ord=new String[5000];
    antall=new int[5000];
    antUnikeOrd=0;
    antOrd=0;
    sjekk=true;

    try{
        innfil=new Scanner(new File(filArgs));
        //Naa sjekker programmet om ordet som blir lest med Scanner-metoden er lest for. Er det slik, saa oeker den antallet i samme index i antall-arrayen med 1, den boolske verdien sjekk blir true, og neste if-lokke vil ikke kjore, for loopen er ferdig og neste ord leses.

        while(innfil.hasNext()){
        String ordLest=innfil.next().toLowerCase(); 
        sjekk=false;
            for(int i=0; i<ord.length; i++){
            if(ordLest.equals(ord[i])){
            antall[i]+=1;
            sjekk=true;
            }
        }
        if(!sjekk){
            //Her vil lokken oke telleren antUnikeOrd med en for hvert unike ord som leses, og denne er alltid en
            ord[antUnikeOrd]=ordLest;
            antall[antUnikeOrd]++;
            antUnikeOrd++;
        }

        antOrd++;
        }
        innfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }


    try{
        utfil=new PrintWriter(new File("Oppsummering.txt"));

        utfil.println("Antall ord lest: " +antOrd+ " og antall unike ord: "+antUnikeOrd+"      "+ ord.length);

        finnOrd(antall, ord, utfil);

        for(int i=0; i<ord.length; i++){
        utfil.println(ord[i]+("  ")+antall[i]);
        }

        utfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }

    //Deklarerer metoden som skal brukes i c:
    try{
        innfil=new Scanner(new File(filArgs));
        ordParInn(innfil, antOrd, antUnikeOrd, ord);
    }catch(Exception e){
        e.printStackTrace();
    }
    }


    //Denne metoden er i bunn og grunn hele B-oppgaven.
    void finnOrd(int[] antall, String[] ord, PrintWriter utfil){
    int teller=1000;
    for(int i=0; i<ord.length; i++){
        if(antall[i]>teller){
        teller=antall[i];
        }
    }
    //Naa er teller lik den hoyeste verdien i antall-arrayen.

    //For aa faa mellomrom mellom innskrivingene, for ordens skyld.

    double tiprosent=teller*0.90;
    for(int i=0; i<ord.length; i++){
        if(antall[i]>tiprosent){
        utfil.println("Vanlige ord: "+ord[i]+"\t("+antall[i]+" forekomster)");
        }
    }
    }

    //Denne metoden er C-oppgaven.
    void ordParInn(Scanner innfil, int antOrd, int antUnikeOrd, String[] ord){
    int [][] ordParTelling=new int[antOrd][antOrd];
    int sc1,sc2;
    String forrigeOrd="";
    sc1=0;
    sc2=0;

    while(innfil.hasNext()){
        String ordLest=innfil.next().toLowerCase();

        for(int i=0; i<ord.length; i++){

        sc1=Arrays.asList(antUnikeOrd).indexOf(ordLest);
        sc2=Arrays.asList(antUnikeOrd).indexOf(forrigeOrd);

        if(sc1>0 && sc2>0){
            ordParTelling[sc2][sc1]++;
        }
        forrigeOrd=ordLest;
        } 

        int alice=Arrays.asList(antUnikeOrd).indexOf("Alice");
        for(int i=0; i<antUnikeOrd; i++){
        if(ordParTelling[alice][i]>0){
            System.out.print(ordParTelling[alice][i]);
            System.out.print("    " + antUnikeOrd[i] + "    " + Arrays.asList(antUnikeOrd).indexOf(antUnikeOrd));
        }
        }
    }
    }
}

错误:

Oblig3C.java:132: error: array required, but int found
            System.out.print("    " + antUnikeOrd[i] + "    " + Arrays.asList(antUnikeOrd).indexOf(antUnikeOrd));
                                                 ^
1 error
4

2 回答 2

0

antUnikeOrd 是一个int.

回想一下,数组是这样初始化的:

int[] arr = new int[5];

你的方法传递一个这样的 int :

void method(int a) {
   //Not legal
   System.out.print(a[0]);
}

如果它作为一个数组传递,那么a[0]将是合法的:

void method(int[] a) {
   System.out.print(a[0]));
}
于 2013-10-18T20:10:26.013 回答
0

你 antUnikeOrd 不是一个数组。像这样写:

for (int i = 0; i < antUnikeOrd; i++) {
    if (ordParTelling[alice][i] > 0) {
        System.out.print(ordParTelling[alice][i]);
        // On the underneath line the error occurs, at the
        // antUnikeOrd[i]
        System.out.print("    " + antUnikeOrd + "    "  + Arrays.asList(antUnikeOrd).indexOf(antUnikeOrd));
    }
}
于 2013-10-18T20:05:04.563 回答