2014-11-01 66 views
-6

写一个程序,给定一个字符串s和炭c时,打印出“是”,如果存在sc 。否则打印出“否”。 (您预计使用循环做你 只能使用长度()和的charAt()字符串类型的函数。)我有这个代码的问题,我也得到肯定的答案都

例子:

south u --> yes 
north T --> no 

输出应该完全一样这样的:

>Please enter a string: 
>ahmet 
>Please enter a char: 
>m 
>yes 

我试图实现它,但我不知道什么是概率在我的代码中lem。我总是变得“真实”。 在我的实现中,我使用了一个可以是0或1的整数。 如果它是0,我打印false。 如果它是1,我打印真实。

这是我的代码:

package ass32; 

import java.util.Scanner; 

public class ass33 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in);   
     System.out.println("give me any string : ");   
     String name = in.next(); 
     System.out.println(">Please enter a char: ");    
     char c = in.next().charAt(0); 
     int e = 0 ; 
     int t = name.length(); 
     char f ; 
     char s ; 
     for (int i = 0 ; i <t ; i++) { 
      f = name.charAt(i);   
      for (int j = 0 ; j <t ; j++) { 
       s = name.charAt(j); 
       if (s==f) 
        e = 1 ;    
      } 
     } 

    if (e==1) 
     System.out.println("yes");   
    else if (e==0) 
     System.out.println("no"); 
    }  
} 
+0

这就是Java代码而不是C或C++! – Rizier123 2014-11-01 08:46:20

+0

因为e总是1!为什么你有两个循环? – 2014-11-01 08:50:05

回答

1

你是比较针对相同字符串的所有字符字符串的所有字符,所以当然找到匹配,并返回“是”。你只需要一个循环。

所有你需要的是:

e = 0; 
for (int i = 0 ; i <t ; i++) {  
    f = name.charAt(i); 
    if (f==c) { 
     e = 1; 
     break; 
    } 
} 
+0

谢谢你很多它的工作 – 2014-11-01 09:34:32

0

你应该试试这个:

for (int i = 0; i < t; i++) { 
    f = name.charAt(i); 
    for (int j = 0; j < t; j++) { // Remove this loop 
     s = name.charAt(j); // Remove this also 
     if (s == f) { // Change this to (c==f) 
      e = 1; 
     } 
    } 
} 
+0

谢谢你哟它的工作 – 2014-11-01 09:35:47

0

试试这个:

boolean isCharFound = false; 
for (int i = 0 ; i <t ; i++) {  
    f = name.charAt(i); 
    if (f==c) { 
     isCharFound = true; 
     break; 
    } 
} 
  • 使用两个回路具有相同的字符串,所以如果您的字符串是“abc”,那么您将abc与abc进行比较,因此您总是会看到sat字符一个在同一个字符串abc目前。这就是错误。
  • 改进代码的另一种方法是,您应该使用布尔值而不是整数来表示是否在字符串中找到字符。
+0

谢谢,是的,它现在工作 – 2014-11-01 09:35:00

相关问题