线性搜索java程序

时间:2015-04-08 12:25:08

标签: java search linear

我的程序仍然存在问题。我回顾了你们告诉我应该修复的内容,我做了什么。我接近让程序正常工作,但我相信从数据文件中获取的索引不起作用。

我的程序假设要输出: 例如:

SAMPLE KEYBOARD INPUT:  What channel are you looking for? ==> MTV
SAMPLE OUTPUT:  No MTV available

OR

SAMPLE KEYBOARD INPUT:  What channel are you looking for? ==> cnn
SAMPLE OUTPUT:  Now tuning to CNN

有没有办法解决我的问题以使程序正常运行?

<。> .dat文件中的数据: NBC

FOX

CBS

ABC

MSNBC

ESPN

CNN

TMC

HBO

USA

package Solutions;

import static java.lang.System.*;
import java.util.*;
import java.io.*;

public class Java5903{
    public static void main(String[] args){
        new Environment().run();
}}


class Environment 
{
    private String[] list;
    String captureTgt;

    public Environment()
    {
    }

    public void run()
    {
        try{
            Scanner fScan = new Scanner(new File("Java5903a.dat"));
                ArrayList<String> addData = new ArrayList<String>();

            while(fScan.hasNext())
            {
                addData.add( fScan.nextLine() );
                    list = addData.toArray( new String[0] );
            }       
                }catch(Exception e){}

            Scanner scan = new Scanner(in);
            out.print("What channel are you looking for? ==> ");
            String target = scan.nextLine();
            captureTgt = find(target);
            find(target);
            if(find(target)==target)
            out.println("Now tunning to " + captureTgt);                
            else
            out.println("No " +captureTgt+ " available");
    }           

    public String find(String tgt)
    {
            for(int i=0;i<list.length;i++){

                    if(list[i]!=tgt)
                    {
                        list[i]+=1;
                    }
                        return list[i];             
            }
            return "";
    }

    public String toString()
    {
        return Arrays.toString( list ) + "\n";
    }
}

5 个答案:

答案 0 :(得分:0)

你应该改变你的方法

public String find(String tgt)
{
        for(int i=0;i<list.length;i++){

                if(tgt.equals(list[i]))
                {
                   return list[i];
                }                      
        }
        return "";
}

不需要list[i]+=1;。您需要使用String类中提供的equals()方法。

也不要三次调用public String find(String tgt)方法。

更改这些行

         captureTgt = find(target);
         find(target);
         if(find(target)==target)

         captureTgt = find(target);
         if(captureTgt.equals(target))

答案 1 :(得分:0)

比较String总是使用.equals()方法。 这是修改后的find()回调方法。我认为它会解决。

public String find(String tgt)
    {
            for(int i=0;i<list.length;i++){

                String cur_word = list[i];

                    if(cur_word.equals(tgt))
                    {
                       return cur_word;
                    }
            }
            return "";
    }

答案 2 :(得分:0)

1将arraylist声明为实例变量。

private ArrayList<String> addData = new ArrayList<String>();
  1. 然后使用列表包含(对象)方法:
  2. 如果列表中出现的String对象为false,则contains()方法将返回true

    if(addData.contains(target)) {
        out.println("Now tunning to " + target);    
    } else {
        out.println("No " +target+ " available");
    }
    

答案 3 :(得分:0)

将以上程序改写为:

import static java.lang.System.*;
import java.util.*;
import java.io.*;

public class Java5903{
    public static void main(String[] args){
        new Environment().run();
    }
}


class Environment {
    private String[] list;
    String captureTgt;

    public void run(){
        try{
            Scanner fScan = new Scanner(new File("Java5903a.dat"));
                ArrayList<String> addData = new ArrayList<String>();

            while(fScan.hasNext()){
                addData.add( fScan.nextLine() );
                    list = addData.toArray( new String[0] );
            }       
                }catch(Exception e){}

            Scanner scan = new Scanner(in);
            out.print("What channel are you looking for? ==> ");
            String target = scan.nextLine();
            captureTgt = find(target);
            if(captureTgt.equalsIgnoreCase(target))
            out.println("Now tunning to " + captureTgt);                
            else
            out.println("No " +target+ " available");
    }           

    public String find(String tgt){
            for(int i=0;i<list.length;i++){
                   if(tgt.equalsIgnoreCase(list[i])){
                      return list[i];
                    }
            }
            return "";
    }

    public String toString(){
        return Arrays.toString( list ) + "\n";
    }
}

并且每件事都会正常工作也请注意,如果您使用CNN或cnn,这两个程序都可以。

答案 4 :(得分:0)

//Easier Example Of LINEAR SEARCH
public class Linear 
{

    public static void main(String[] args) 
    {
        int a[]={1,2,3,4};
        int x=4;
        int flag=0;
        for(int i=0;i<a.length;i++)
        {

                if(a[i]==x)
                {
                    flag=1;
                }
                else
                {
                    flag=0;
                }


        }
        if(flag==1)
        {
            System.out.println(" found ");
        }
        if(flag==0)
        {
            System.out.println("not found ");
        }

    }

}