2016-06-28 59 views
0

我是的新手嘗試找出答案,但無法找到正確的答案。該計劃是在平坦的地方打印信件。從字符串打印甚至字符 - 錯誤非靜態方法無法從靜態上下文中引用

輸入: 黑客 排名

輸出 HCE Rn中

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public char[] printeven(char[] arr1) 
    { 
     char[] result1; 
     int index = 0; 
     for(int i=1; i<arr1.length; i+=2) 
     { 
      result1[index] = arr1[i]; 
      index += 1; 
     } 
     System.out.println(result1); 
     return result1; 

    } 


    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 scan = new Scanner(System.in); 
     int T = scan.nextInt(); 
     String s1= scan.next(); 
     String s2= scan.next(); 
     scan.close(); 

     char[] array1 = s1.toCharArray(); 
     char[] array2 = s1.toCharArray(); 

     printeven(array1); 
     printeven(array2); 
    } 
} 

我的猜測是消除從主靜,但比我得到的錯誤,

Solution.java:15: error: variable result1 might not have been initialized 
      result1[index] = arr1[i]; 
     ^
Solution.java:18: error: variable result1 might not have been initialized 
     System.out.println(result1); 
         ^

2個錯誤

+0

你需要更多關於java的學習,你可以說java的基礎。 –

+0

投票重新打開,因爲未初始化的變量錯誤。 – shmosel

回答

1

只是讓你的方法printeven靜:

public static char[] printeven(char[] arr1)

即使main處於同一個類中,您仍處於靜態上下文中,並且無法訪問Solution類的非靜態成員。

你也可以初始化一個解決方案,並調用方法:

Solution solution = new Solution(); 
solution.printeven(array1); 
solution.printeven(array2); 

最後,你需要在使用前初始化數組:

char[] result1 = new char[arr1.length];

1

這是JAVA的基本概念。您不能在JAVA中從靜態方法引用非靜態方法。此外,您不能從主要方法中刪除static,因爲它是充當程序入口點的主要方法,應該保持靜態。

爲了訪問您的非靜態方法,只需初始化您的類的一個對象,然後按如下方式使用它。

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int T = scan.nextInt(); 
    String s1= scan.next(); 
    String s2= scan.next(); 
    scan.close(); 

    char[] array1 = s1.toCharArray(); 
    char[] array2 = s1.toCharArray(); 

    // initialize an object of your class 
    Solution sol=new Solution(); 
    sol.printeven(array1); 
    sol.printeven(array2); 
} 
0

printevenSolution類的非靜態成員函數。要訪問類的非靜態成員,您需要創建該類的對象並通過創建的對象訪問該成員。這樣的 -

MyClass myObject = new MyClass(); 
myObject.callMyClassFunction(); 

如果你要調用的成員函數,而無需創建類的一個對象,那麼你需要聲明爲靜態的成員。那麼你可以簡單地做

MyClass.callMyClassFunction() 

沒有創建任何對象。

關於錯誤消息 -

非靜態方法不能從靜態上下文

的主要功能是靜態函數和一個靜態函數只能訪問其他靜態成員引用。你可以閱讀更多關於static看過來 - https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

0

我有兩個不同的解決方案,

首先,

import java.util.*; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int testCases = scan.nextInt(); 
     for(int i = 0; i < testCases; i++){ 
      char[] inputString = scan.next().toCharArray(); 

      // Print even chars 
      for(int j = 0; j < inputString.length; j += 2){ 
       System.out.print(inputString[j]); 
      } 
      System.out.print(" "); 

      // Print odd chars 
      for(int j = 1; j < inputString.length; j += 2){ 
       System.out.print(inputString[j]); 
      } 
      System.out.println(); 
     } 
     scan.close(); 
    } 
} 

其次,

import java.util.*; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int testCases = scan.nextInt(); 
     for(int i = 0; i < testCases; i++){ 
      char[] inputString = scan.next().toCharArray(); 
      StringBuilder oddString = new StringBuilder(); 
      StringBuilder evenString = new StringBuilder(); 

      for(int j = 0; j < inputString.length; j++) { 
       if((j & 1) == 0) { 
        evenString.append(inputString[j]); 
       } 
       else { 
        oddString.append(inputString[j]); 
       } 
      } 

      System.out.println(evenString + " " + oddString); 
     } 
     scan.close(); 
    } 
} 

但還是想做這個問題多種方法。

相關問題