在for循环中没有得到正确的数字

时间:2014-11-10 20:05:17

标签: java

那边是Hy。下面你可以看到我的代码段。那么让我们来解决问题吧。 int我没有返回正确的值,我无法弄明白为什么。

列表:[AGRFT,AGRFT,ARNES,ASCII,ASEAN,Aaron,Abdul,Abdul]

所以举个例子。用户输入AS ***,程序应该返回i是2.但是我得到的是0。

如果我没记错的话应该是这样的:

User_input = AS ***

User_input.lenght()应为5

首先它应该是user_input.charAt(0)=='*'NO

第二个应该是user_input.charAt(1)=='*'NO

第三个应该是user_input.charAt(2)=='*'YES

BREAK

我是2岁。

那我缺少什么?

我收到0。

哦,还有

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

我正在警告i ++是死代码?

 if (dolzina == 5) {

            for(i=0; i < user_input.length();i++){  
                if (user_input.charAt(i)=='*'); 
                break;
            }

            System.out.println("i is at "+ i);

这是我的完整代码。从txt文件读取的内容添加了什么

public class proba {


public static void main(String[] args) {
    String izbira;
    int dolzina=0;
    int i=0;
    Scanner in = new Scanner(System.in);
    String user_input;
    Scanner input = new Scanner(System.in);
    String regex;
    List<String> list5 = new ArrayList<String>();
    int beseda;
    String prefix = null;
    try {

        File file = new File("sort.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String vrstica;

        while ((vrstica = bufferedReader.readLine()) != null) {

            if (vrstica.length() == 5) {
                list5.add(vrstica);

            }
        }
        System.out.println(list5);
        do{
            do {
                System.out.println("Enter lenght of word:");
                if (in.hasNextInt()) {
                    dolzina = in.nextInt();
                } else if (in.hasNextLine()) {
                    System.out.printf("Wrong entry!%n ",
                            in.nextLine());
                } 
            } while (dolzina <= 0);

        Collections.sort(list5);

        System.out.println("Enter a word for unknown character enter * :");
        user_input = input.nextLine();



        System.out.println("Sorted list: [length: " + list5.size() + "]");

        if (dolzina == 5) {

            for(i=0; i < user_input.length();i++){  
                if (user_input.charAt(i)=='*'); 
                break;
            }

            System.out.println("i je"+ i);
            prefix=user_input.substring(0,i);
            System.out.println(prefix);


        int start=binarySearchfirst(list5,prefix);
        int end=binarySearchlast(list5,prefix);
        System.out.println(start);
        System.out.println(end);
        for (int b=start;b<=end;b++)
        {
            user_input = user_input.replace("*", ".");
            String s = (String) list5.get(b);
            if (s.matches(user_input))
                System.out.println(s);
        }
        }
        dolzina=-1;
        System.out.println("Ponovni vnos (da/ne):");
        Scanner inn= new Scanner (System.in);
        izbira = inn.next();



        }while (izbira.equalsIgnoreCase("da"));
        bufferedReader.close();     
        } catch (IOException e) {
        e.printStackTrace();
        }}

public static int binarySearchfirst(List<String> integerList, String prefix) {

    int low = 0;
    int high = integerList.size() - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        if (integerList.get(mid).startsWith(prefix)) {
            if (mid == 0 || !integerList.get(mid - 1).startsWith(prefix)) {
                return mid;
            } else {
                high = mid - 1;
            }
        } else if (prefix.compareTo(integerList.get(mid)) > 0) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    return low;
}
public static int binarySearchlast(List<String> integerList, String prefix) {
        int low = 0;
        int high = integerList.size()-1;
        while (low <= high) {
            int mid = (low+high)/2;
            if (integerList.get(mid).startsWith(prefix)) {
                if (mid == integerList.size()-1 || !integerList.get(mid+1).startsWith(prefix)) {
                    return mid;
                }
                else {
                    low = mid+1;
                }
            }
            else if (prefix.compareTo(integerList.get(mid)) > 0) {
                low = mid+1;
            }
            else {
                high = mid-1;
            }
        }
        return high;
    }


}

1 个答案:

答案 0 :(得分:5)

在if语句后面有一个额外的分号:

for(i=0; i < user_input.length();i++)
{   if (user_input.charAt(i)=='*'); 
       break;
}

所以无论如何,第一次通过循环执行中断。这也是为什么i++被报告为死代码的原因......它永远不会被执行。