2016-06-28 57 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(); 
    } 
} 

但还是想做这个问题多种方法。

相关问题