Java — для запроса, связанного с циклом

#java

#java

Вопрос:

Я хочу получить индекс первой буквы ‘d’ во вводимом строковом массиве.

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

public class Main {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int i,j,p1=0,p2=0;
    String grid[] = new String[5];
    for(i=0; i<5; i  )
        grid[i] = sc.next();

    for(i=0;i<5;i  )
    {
        for(j=0;j<5;j  )
        {
            if(grid[i].charAt(j)=='d')
            {
                p1=i;
                p2=j;
                break;
            }
        }
    }
    System.out.println(p1 "n" p2);
}
}
 

ввод
—d-

—d- -d — —d— вывод 4 2

Он всегда выдает мне последний индекс ‘d’, хотя я выполняю цикл от (0,0) до (5,5) Принимая во внимание, что если я внес изменения в цикл for и запустил его из (i=4; i>=0; i—), то проблема решена. Почему?

Комментарии:

1. Вы ищете индекс d? Почему бы не использовать строковый метод indexOf() ?

Ответ №1:

Это происходит потому, что при использовании break он выводит вас только из внутреннего for цикла, а внешний цикл продолжает выполняться для следующих строк в grid массиве. Кроме того, вы должны запустить внутренний цикл для 0 to grid[i].length()-1 .

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

public class Main {

public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. 
    Your class should be named Solution. */
    Scanner sc = new Scanner(System.in);
    int r = sc.nextInt();
    int c = sc.nextInt();
    int i,j,p1=0,p2=0;
    String grid[] = new String[5];
    for(i=0; i<5; i  )
        grid[i] = sc.next();

    boolean found = false;
    for(i=0;i<5;i  ) {
        for(j=0;j<grid[i].length();j  ) {
            if(grid[i].charAt(j)=='d') {
                p1=i;
                p2=j;
                found = true;
                break;
            }
            if(found) {
                break;
            }
        }
    }
    System.out.println(p1 "n" p2);
}
}
 

Комментарии:

1. Спасибо. Я думал, что оператор ‘break’ выведет меня из обоих циклов.

2. else write прерывает внешний цикл

3. @NoorAhmedNatali да, я тоже могу это использовать, спасибо.

4. пожалуйста, нажмите стрелку вверх в моем ответе, если это поможет вам

Ответ №2:

 public class HelloWorld{

     public static void main(String[] args) {
    
    int i,j,p1=0,p2=0;
    String grid=  "How do you do"; // you can take input as " scannerobj.nextLine()"
    for(i=0;i<5;i  )
    {
        for(j=0;j<5;j  )
        {
            if(grid.charAt(j) == 'd')
            {
                p1=i;
                p2=j;
                break;
            }
        }
    }
    System.out.println(p1 "n" p2);
}
}
 

или вы можете использовать :

 public class HelloWorld{

     public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    
    int i,j,p1=0,p2=0;
    String grid=  "How do you do"; // you can take input as "scannerobj.nextLine()
    for(i=0;i<grid.length();i  )
    {
            if(grid.charAt(i) == 'd')
            {
                p1=i;
                break;
            }

    }
    System.out.println(p1 "n");
}
}
 

Комментарии:

1. и зачем вам 2 цикла, мы можем сделать это за 1 цикл

2. Я использовал массив строк, потому что ввод состоял из нескольких строк. ссылка это вопрос

3. вы хотите использовать каждую строку ..?

Ответ №3:

Скопируйте весь этот код

 import java.util.Scanner;
import java.util.ArrayList;

public class MyClass {
    
    
    public static void main(String args[]) {
      ArrayList<String> in = new ArrayList<String>();
        Scanner s = new Scanner(System.in);
        
        int p1=0,p2=0;
        while (s.hasNextLine()) {
            String line = s.nextLine();
            in.add(line);
            if (line != null amp;amp; line.equalsIgnoreCase("END")) {
                System.out.println("Output list : "   in);
                break;
            }

        }
        outerloop:
        for(int i=0;i< in.size();i  )
        {
            // System.out.print(i " "  in.get(i));
            for(int j=0;j < in.get(i).length();j  )
            {
                if (in.get(i).charAt(j) == 'd')
                {
                    p1=i;
                    p2=j;
                    break outerloop;
                    
                }
                
            }
        }
        
        System.out.print(p1  " "  p2);
        
    }
}
 

Ответ №4:

Задавая свой вопрос, будьте конкретны. Согласно вашему вопросу, вы хотите получить первый индекс буквы «d» во вводимой строке, тогда это будет код.

 import java.util.*;
public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int i,index=0;
        String grid= sc.nextLine(); //takes any string 
        for(i=0;i<grid.length();i  )
        {
           
                if(grid.charAt(i) == 'd')
                {
                    index=i;
                    break;
                }
        }
        System.out.println(index);
    }

}
 
 Input
---d-
Output
3
 

если вы хотите выполнить несколько запросов / входных данных, то это будет код

 import java.util.*;
public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int queries=sc.nextInt(); //number of queries
        while(queries-->0)
        {
            int i,index=0;
            String grid= sc.next(); //takes any string 
            for(i=0;i<grid.length();i  )
            {
               
                    if(grid.charAt(i) == 'd')
                    {
                        index=i;
                        break;
                    }
            }
            System.out.print(index " ");
        }
        
    }

}
 
 input
2
---d-
-----

output 
3 
0