2016-04-02 22 views
0

dize döndürmüyor Java uyguluyor ve biraz tuhaf bir sorunla karşılaşıyorum ya da sorunlarım var. Hata: Ben diyor aşağıdaki kodu java hat # derleme yaparkenJava, tarayıcı girdisinden

Ben return "not valid" var yorumunu kaldırırsanız

missing return statement.

, bu derler. Ben A ve B olarak, bu geçerli değil döndürür ben girişi init_config ve final_config dize geçirdiğinizde diğer konu. Devreye girer

Şimdi burası. Diğer fonksiyonu (other("A", "B")"C" baskılı/döndürülür olduğunu belli getiri.

için "A" ve "B" geçerken Ama mesele benim giriş yöntemi ile yatıyor emin değilim. Benim init_config ve final_config için veri girebilirim dize değerleri, doğru olmalı mıyım? Tarayıcı iyi bir dize giriş yöntemi olup olmadığından emin değilim.Ancak, ben iki girişleri yazdırırsam iyi çalışır, bu yüzden veri kaybı olup olmadığından emin değilim veya dize referansı kaybolduğunda ben de init_config = in.nextLine() ile init_config = in.next() yerine çalıştı

. geçirilir ama hiçbir şey fark etmedi.

Kodu, fonksiyonun sonunda return "not valid" ile derlemek gerekli mi yoksa bunu bir yöntemle atlayabilir miyim? Ve herhangi bir kayıp olmadan Scanner giriş yöntemini kullanarak String verilerini nasıl iletebilirim?

import java.util.Scanner; 
public class towerGen 
{ 
    public static void main(String[]args) 
    { 
     Scanner in = new Scanner(System.in); 
     String init_config, final_config; 

     System.out.print("Enter initial configuration: "); 
     init_config = in.next(); 

     System.out.print("Enter final configuration: "); 
     final_config = in.next(); 

     System.out.print(other(init_config, final_config)); 

    } 

    public static String other(String src, String dest) 
    { 
     if (src=="A" && dest=="B") 
      return "C"; 
     if (src=="B" && dest=="A") 
      return "C"; 
     if (src=="B" && dest=="C") 
      return "A"; 
     if (src=="C" && dest=="B") 
      return "A"; 
     if (src=="A" && dest=="C") 
      return "B"; 
     if (src=="C" && dest=="A") 
      return "B"; 
    //return "not valid"; 
    } 
} 
+2

Dizeleri asla = = her zaman 'equals' yöntemini kullanarak sınayın. –

+0

Teşekkür ederim. @ Jean-BaptisteYunès – mickey4691

cevap

1

Is it necessary to compile the code with the return "not valid" at the end of the function?

Evet, öyle:

İşte benim kodudur. Çünkü derleyici, giriş dizeleri listelediğiniz koşullardan herhangi birini karşılamıyorsa, iade edilecek hiçbir şey olmadığını fark eder, bu geçersiz olmayan bir yöntemde bir hatadır.

Ayrıca, other yönteminizde, Dizeleri karşılaştırırken src.equals("A") ve src == "A" kullanmanız gerekir.

+0

Bu güzel. Bütün gün aradığım .equals() hakkında hiçbir şey bilmiyordum ama belki de şartlarım yanlıştı. Teşekkürler. – mickey4691

0

Ben resmin kavramı içine getiriyor

Use equals method instead of ==. Because == checks if the both the object references are referring to the same object and not the contents inside it.

, işlevi diğer ("A", "B") çağrıldığında çalışıyordu neden cevap vermek ister misiniz, hemen hemen yukarıdaki tartışma yani gelen cevabı var düşünüyorum Dize havuzu, hangi dikkat değerdir.

But when I pass "A" and "B" to other function (other("A", "B") the specific return which is "C" is returned/printed.

biznew operatörü (literal aka String) olmadan bir String nesnesi oluşturmak, o nesneyi almak için dize havuzu kullanır. Mevcut değilse, bu dizeyi oluşturacak ve dize havuzuna koyacaktır. Dize havuzu paylaşıldı. Ve eğer new operatörünü kullanırsak, her zaman yeni bir String nesnesi yaratacaktır ve biri var olsa bile havuzda bir tane göndermeyecektir.

other("A", "B")'u çağırdığınızda, burada argümanlar dizgi havuzundaki dize nesnelerini işaret eder. Ve daha sonra src=="A" gibi bir denetim gerçekleştirdiğinizde other(..) yönteminde, src ve "A" her ikisi de havuzdaki aynı dize nesnesine başvuruda bulunduğundan, true değerini döndürür.

Bunu test etmek için System.out.print(other(new String("A"), "B")); ile deneyebilirsiniz ve bu numaralı numaralı telefon numarasına bir kez daha dönecektir.

Daha fazla bilgi için java string with new operator and a literal'a bakın.

+0

Bu çok güzel. Teşekkür ederim. – mickey4691

İlgili konular